設計原則-依賴反轉原則

可以不用,但是要會發表於2020-10-15
  1. 控制反轉
    實際上,控制反轉是一個比較籠統的設計思想,並不是一種具體的實現方法,一般用來指導框架層面的設計。這裡所說的“控制”指的是對程式執行流程的控制,而“反轉”指的是在沒有使用框架之前,程式設計師自己控制整個程式的執行。在使用框架之後,整個程式的執行流程通過框架來控制。流程的控制權從程式設計師“反轉”給了框架。

  2. 依賴注入
    依賴注入和控制反轉恰恰相反,它是一種具體的編碼技巧。我們不通過 new 的方式在類內部建立依賴類的物件,而是將依賴的類物件在外部建立好之後,通過建構函式、函式引數等方式傳遞(或注入)給類來使用。

  3. 依賴注入框架
    我們通過依賴注入框架提供的擴充套件點,簡單配置一下所有需要的類及其類與類之間依賴關係,就可以實現由框架來自動建立物件、管理物件的生命週期、依賴注入等原本需要程式設計師來做的事情。

  4. 依賴反轉原則
    依賴反轉原則也叫作依賴倒置原則。這條原則跟控制反轉有點類似,主要用來指導框架層面的設計。高層模組不依賴低層模組,它們共同依賴同一個抽象。抽象不要依賴具體實現細節,具體實現細節依賴抽象。

依賴反轉原則(DIP)

  • 依賴反轉原則的英文翻譯是 Dependency Inversion Principle,縮寫為 DIP。中文翻譯有時候也叫依賴倒置原則。
  • 英文描述
High-level modules shouldn’t depend on low-level modules. Both modules
should depend on abstractions. In addition, abstractions shouldn’t depend on
details. Details depend on abstractions.
  • 中文描述
高層模組(high-level modules)不要依賴低層模組(low-level)。高層模組和低層模組應該通過抽象(abstractions)來互相依賴。除此之外,抽象(abstractions)不要依賴具體實現細節(details),具體實現細節
(details)依賴抽象(abstractions)。

所謂高層模組和低層模組的劃分,簡單來說就是,在呼叫鏈上,呼叫者屬於高層,被呼叫者屬於低層。在平時的業務程式碼開發中,高層模組依賴底層模組是沒有任何問題的。實際上,這條原則主要還是用來指導框架層面的設計,跟前面講到的控制反轉類似。我們拿 Tomcat
這個 Servlet 容器作為例子來解釋一下。

Tomcat 是執行 Java Web 應用程式的容器。我們編寫的 Web 應用程式程式碼只需要部署在Tomcat 容器下,便可以被 Tomcat 容器呼叫執行。按照之前的劃分原則,Tomcat 就是高層模組,我們編寫的 Web 應用程式程式碼就是低層模組。Tomcat 和應用程式程式碼之間並沒有直接的依賴關係,兩者都依賴同一個“抽象”,也就是 Sevlet 規範。Servlet 規範不依賴具體的 Tomcat 容器和應用程式的實現細節,而 Tomcat 容器和應用程式依賴 Servlet規範。

相關文章