2015-01-08 64 views
2

我幾個月來一直在撓頭,我仍然能夠令人滿意地說服自己我有正確的答案。我們有一個非常典型的情況,我們在應用程序的多個層之間存在依賴關係,每個層都在自己的程序集中。作爲例子,我們的應用程序層使用存儲庫層來檢索非常標準的數據。我的問題是,抽象(本例中爲接口)在哪裏存在,爲什麼?在給出的例子中,它是否應該放在應用程序層或存儲庫層或單獨的抽象程序集中?依賴倒置原則 - 接口應該在哪裏?

根據The Clean Architecture description中的圖表和描述(不是我們特別遵守的)我已經將它們放在應用程序層中,以便所有依賴項都向內指向,但我不確定這是否正確。我已經閱讀了不少其他文章,並且看到了無數的例子,但是關於抽象概念應該在何處生存的理由很少。

我見過this question但我不相信它回答我的問題,除非當然實際答案是無關緊要的。

回答

2

它被稱爲依賴倒置原則,因爲從一個更高層次的模塊到較低水平的經典依賴性方向反轉如下:

| HigherLevelClass -> RequiredInterface | <= LowerLevelClassImplementingTheInterface | 

所以反相依賴從下水平模塊到指向需要抽象爲您的高級模塊。 由於客戶端模塊(您的應用程序層)需要某個較低級別的功能,相關的抽象(您的存儲庫接口)放置在客戶端模塊附近。

我知道的所有描述使用包結構來解釋這個。 但是,我沒有看到爲什麼這不適用於模塊或圖層。

有關詳細信息,例如見:http://en.wikipedia.org/wiki/Dependency_inversion_principle