天天看點

abp、dotnet core 之子產品化程式設計有感

netcore 發展到現在已經到了 3.0 版本,而 abp 作為典型的 ddd架構模闆,也已經在諸多項目中得到實踐。

說來慚愧,在.net 平台有做了差不多三年了,這兩個好東西一個都沒有好好學習了解過。

正好前段時間決心學習 abp,對 abp 的子產品概念有了了解,而最近一個偶然機會,使用 netcore 做個簡單的項目,意外的發現abp和netcore 的子產品設計思想是極其的相似!

全局依賴注入

abp 和 core 都使用了一個全局依賴注入的方式,所有的子產品通過容器進行注冊,然後在程式中的不同地方随時使用注冊了的服務。使用 依賴注入的好處顯而易見,避免了在代碼中寫死代碼,大大的減少了代碼的耦合程度,便于調整和維護。

1.在 abp 中注冊子產品服務的做法是,在子產品自己實作 abpmodule,啟動程式在啟動時去周遊依賴子產品中實作了  abpmodule 的類,然後調用初始化流程(abp中初始化詳細流程請移步 abp相關文檔)。初始化的過程就是将子產品定義的功能服務注冊到容器中,那麼主程式或者其它調用的子產品使用子產品的服務時,就可以通過注入的方式自動從容器中擷取到服務對象。

2.而在netcore 的子產品注冊方式是在 ConfigureService 方法(相當于啟動方法)通過調用 app.AddXXXX()  來注冊子產品,這個 AddXXX 實際上是一個擴充方法,子產品自身實作一個子產品初始化的擴充方法,在啟動方法調用時會傳入容器對象,而後子產品自己做自己子產品的注冊調用。

子產品配置

使用子產品化程式設計自然時要考慮子產品适應不同的應用場景和情況,那自然是少不了在使用子產品時時對子產品進行動态配置。abp和netcore都提供了便捷的配置方案。

1.abp中的子產品通過對 abpconfig基類實作擴充方法,在主程式配置時,隻需調用對應子產品的配置擴充方法即可進行子產品的配置(有點類似 netcore子產品注冊的方式)。

2.netcore 的配置就更加簡單直接了,在調用 AddXXXX() 注冊子產品的同時,子產品往往提供帶有配置參數的重載方法,在進行子產品的注冊時,就順便進行配置資訊的配置。

後話

 解耦和擴充在程式開發中無非是經常談起的,通過面向抽象程式設計,使用依賴注入的方式來管理對象的建立,大大降低了耦合度,而使用子產品化的程式設計方式一來子產品功能的複用減少重複編碼的問題,通過還可以根據具體的情況實作不同需求的子產品,需求的變更和擴充就友善了。

在一般的程式開發中如果使用 依賴注入+子產品化的方式進行開發的話,在開發和維護上的效率都會快上很多。