依赖倒置原则的第二个陈述阐述

时间:2016-08-27 14:39:35

标签: oop design-patterns solid-principles

以下两个陈述是依赖性倒置原则(DIP)的核心:

“高级模块不应该依赖于低级模块。两者都应该依赖于抽象。” “抽象不应该依赖于细节。细节应该取决于抽象。”

我阅读了有关DIP的不同书籍和文章;所有这些都解释了第一个陈述,但没有一个解释第二个陈述:“抽象不应该依赖于细节。细节应该取决于抽象”。请解释第二个陈述的确切含义。

3 个答案:

答案 0 :(得分:2)

这只是意味着您不想仅因为细节发生变化而更改抽象,因为细节可能会发生变化。

由于高级和低级模块都依赖于抽象,因此只要细节发生变化,它们也必须进行更改。这显然是不可取的。

答案 1 :(得分:2)

首先通过查看实现(详细信息)来决定接口(抽象)

e.g。您可以定义Repository接口。但是在设计Repository接口时,您不应该通过查看 SQL实现或NoSQL实现(详细信息)等特定解决方案来决定接口(抽象)

让Repository接口是通用的,SQL功能或NoSQL功能实现应该是特定的。

如果您通过 Martin Fowler

阅读此article,您将会清楚地了解第二条陈述
  

为不同的存储机制切换存储库,其界面中没有提及SQL,因此我们可以使用内存解决方案,NoSql解决方案或RESTful服务。

答案 2 :(得分:1)

您应该将“详细信息”视为“实施”: - 如果您声明某个接口,则它不依赖于其未来的实现类。 - 另一方面,实现类应该引用它们的接口并实现它们的方法,所以它们依赖于它。