依賴反轉原則

在面向對象編程領域中,依賴反轉原則(Dependency inversion principle,DIP)是指一種特定的解耦(傳統的依賴關係創建在高層次上,而具體的策略設定則套用在低層次的模組上)形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒(反轉),從而使得低層次模組依賴於高層次模組的需求抽象。

描述

在傳統的套用架構中,低層次的組件設計用於被高層次的組件使用,這一點提供了逐步的構建一個複雜系統的可能。在這種結構下,高層次的組件直接依賴於低層次的組件去實現一些任務。這種對於低層次組件的依賴限制了高層次組件被重用的可行性。

依賴反轉原則的目的是把高層次組件從對低層次組件的依賴中解耦出來,這樣使得重用不同層級的組件實現變得可能。把高層組件和低層組件劃分到不同的包/庫(在這些包/庫中擁有定義了高層組件所必須的行為和服務的接口,並且存在高層組件的包)中的方式促進了這種解耦。由於低層組件是對高層組件接口的具體實現,因此低層組件包的編譯是依賴於高層組件的,這顛倒了傳統的依賴關係。眾多的設計模式,比如外掛程式,服務定位器或者依賴反轉,則被用來在運行時把指定的低層組件實現提供給高層組件。

套用依賴反轉原則同樣被認為是套用了適配器模式,例如:高層的類定義了它自己的適配器接口(高層類所依賴的抽象接口)。被適配的對象同樣依賴於適配器接口的抽象(這是當然的,因為它實現了這個接口),同時它的實現則可以使用它自身所在低層模組的代碼。通過這種方式,高層組件則不依賴於低層組件,因為它(高層組件)僅間接的通過調用適配器接口多態方法使用了低層組件,而這些多態方法則是由被適配對象以及它的低層模組所實現的。

內容

該原則規定:

高層次的模組不應該依賴於低層次的模組,兩者都應該依賴於抽象接口。抽象接口不應該依賴於具體實現。而具體實現則應該依賴於抽象接口。

該原則顛倒了一部分人對於面向對象設計的認識方式。如高層次和低層次對象都應該依賴於相同的抽象接口。

歷史

依賴反轉原則由羅伯特·C·馬丁提出,並且在數篇公開著作中被表述,包括論文《面向對象設計質量標準:對於依賴的分析》,以及一篇1996年出現在C++報導中的名為《依賴反轉原則》的文章,和《敏捷軟體開發,原則,模式和實踐》,《C#中的敏捷原則,模式和實踐》兩本書。

面向對象程式設計

面向對象程式設計(英語:Object-oriented programming,縮寫:OOP)是種具有對象概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含數據、屬性、代碼與方法。對象則指的是類的實例。它將對象作為程式的基本單元,將程式和數據封裝其中,以提高軟體的重用性、靈活性和擴展性,對象里的程式可以訪問及經常修改對象相關連的數據。在面向對象程式編程里,電腦程式會被設計成彼此相關的對象。

面向對象程式設計可以看作一種在程式中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函式的集合,或者直接就是一系列對計算機下達的指令。面向對象程式設計中的每一個對象都應該能夠接受數據、處理數據並將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。目前已經被證實的是,面向對象程式設計推廣了程式的靈活性和可維護性,並且在大型項目設計中廣為套用。此外,支持者聲稱面向對象程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。反對者在某些領域對此予以否認。

適配器模式

在設計模式中, 適配器模式(英語:adapter pattern)有時候也稱包裝樣式或者包裝(wrapper)。將一個類的接口轉接成用戶所期待的。一個適配使得因接口不兼容而不能在一起工作的類能在一起工作,做法是將類自己的接口包裹在一個已存在的類中。

相關詞條

熱門詞條

聯絡我們