控制反轉、依賴反轉、依賴注入的理解

SOLID原則:單一職責、開閉原則、里氏替換、接口隔離、依賴反轉;而在開發過程中也經常說到控制反轉,依賴注入等名詞;本章會根據自己理解,來說明這幾個概念的區別與聯繫。

一、控制反轉(IOC)

通過框架提供一個可擴展的代碼骨架,用來組裝對象、管理整個執行流程。在後續利用框架進行開發的時候,只需要往預留的擴展點上,添加跟自己業務相關的代碼,就可以利用框架來驅動整個程序流程的執行。
這裏的控制是指對程序流程的控制,而“反轉”指的是在沒有使用框架之前,程序員自己控制整個程序的執行。在使用框架之後,整個程序的執行流程可以通過框架來控制。流程的控制權由程序員“反轉”到了框架。 比如設計及模式中的模板模式。
控制反轉並不是一種具體的實現技巧,更多的是用來指導框架層面的設計思想。

二、依賴注入(DI)

Dependency Injection,依賴注入是一種具體的編碼技巧。概述:不通過new()的方式在類內部創建依賴類對象,而是將依賴的類對象在外部創建好之後,通過構造函數、函數參數等方式傳遞(或注入)給類使用。
依賴注入可以和像工廠模式,抽象工廠模式,build等設計模式很好的工作;提高了代碼的擴展性和靈活性。它也是編寫可測試性代碼的最有效手段。

a. 依賴注入框架(DI Framework)

依賴注入本身只是讓對象實例的創建發生在程序的更上游;並不能減少創建那部分代碼,而這部分代碼本身的價值不大;依賴注入框架的作用就是消除這部分代碼。
在使用“依賴注入框架”時,我們只需要通過依賴注入框架提供的擴展點,配置一下所有需要創建的類對象、類與類之間的依賴關係,就可以利用框架來自動實現對象的創建、對象生命週期的管理、依賴注入等工作。

依賴注入是控制反轉容器的一種表現形式,它只是表述更具體且更有針對性。如Spring框架的控制反轉主要是通過依賴注入來實現的。

三、依賴反轉原則(DIP)

Dependency Inversion Principle, 也叫依賴倒置原則。原則描述:高層模塊(high-level modules)不要依賴低層模塊(low-level)。高層模塊和低層模塊應該通過抽象(abstractions)來互相依賴;除此之外,抽象(abstractions)不要依賴具體實現細節(details),具體實現細節(details)依賴抽象(abstractions)。
在整個調用鏈中,調用者屬於高層,被調用者屬於低層;在平時業務開發時,高層模塊依賴底層模塊是沒有任何問題的。該原則主要用於指導框架層面的設計跟前面講的控制反轉類似
例子:
Tomcat 是運行 Java Web 應用程序的容器。我們編寫的 Web 應用程序代碼只需要部署在 Tomcat 容器下,便可以被 Tomcat 容器調用執行。按照之前的劃分原則,Tomcat 就是高層模塊,我們編寫的 Web 應用程序代碼就是低層模塊。Tomcat 和應用程序代碼之間並沒有直接的依賴關係,兩者都依賴同一個“抽象”,也就是 Sevlet 規範。Servlet 規範不依賴具體的 Tomcat 容器和應用程序的實現細節,而 Tomcat 容器和應用程序依賴 Servlet 規範。

發佈了26 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章