設計原則:為什么需要“IOC”


背景知識

控制反轉

反轉傳統的控制邏輯,常見的傳統控制邏輯有:

一、客戶類型負責創建依賴。反轉后的結構是:由IOC負責創建。

二、客戶類型調用框架。反轉后的結果是:框架調用客戶類型。

依賴注入

客戶類型需要顯式的聲明其依賴,不要在客戶類型中管理依賴的創建。

IOC

中文可以翻譯為:控制反轉容器或依賴注入容器。

參考資料

Inversion of Control Containers and the Dependency Injection pattern

InversionOfControl

設計原則:我是如何使用“依賴注入”的

.NET:在ASPX、ASHX和MVC中使用IOC容器(菜鳥必看)

DDD:管理“工作單元實例”的兩種模式

為什么要使用IOC容器?

從對象的角度思考什么系統

系統是由一張對象圖組合而成,這些對象通過彼此之間的協作(發送消息)來完成需求。概括如下:

系統 = 對象圖 

基於類的語言如何表示系統

毫無疑問,在基於類的語言中:系統 = 類型定義 + 對象圖(如何實例化)

考慮一個三層架構中的類圖

如何創建這個類圖的對象圖?

簡單的來說,我們有兩種思路:

一、客戶類型負責new依賴類型。這樣做的結果是:

    1. 類圖就是對象圖,編譯時綁定。
    2. 需要手工管理依賴的生命周期。
    3. 很難做單元測試。
    4. 很難升級和維護,比如:引入了一個新的子類,你要到處修改new的代碼。

二、采用IOC容器new依賴類型。這樣做的結果是:

    1. 類圖不一定是對象圖,運行時綁定。
    2. IOC容器掛自動管理的生命周期。
    3. 容易做單元測試。
    4. 容易升級和維護。

備注

有人說IOC的注冊太麻煩,比new還麻煩,針對這個問題的思路是:“根據約定自動注冊”,我就采用這種方式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM