【发布时间】:2021-01-02 16:08:03
【问题描述】:
我目前正在阅读有关依赖倒置原则的其他优秀教程
https://www.baeldung.com/java-dependency-inversion-principle
尽管思考了相当长的时间,但有些东西我还是无法解释
DIP 定义的相关部分:“高层模块不应该依赖低层模块。两者都应该依赖于抽象。”
在第3.1点“Design Choices and the DIP”作者通过一个例子介绍了原理,其中StringProcessor类使用了StringReader和StringWriter组件并给出了多种设计选择wrt 使用接口/类和包。我的问题是选择 2,即
"StringReader 和 StringWriter 是与实现一起放在同一个包中的接口。StringProcessor 现在依赖于抽象,但低级组件不依赖。我们还没有实现还没有依赖”
StringProcessor 是 “高级组件”,它依赖于 “抽象” 即 StringReader 和 StringWriter 接口,从而从一个实现 DIP 定义侧面,这很清楚。现在给出第一句中提到的整篇文章“实现”中使用的术语,例如ConcreteStringReader 和 ConcreteStringWriter 类将是这里的 “低级组件”,而我只是无法理解它们如何不依赖于 “抽象” em> 即在它们实现的接口上,无论包含什么包
显然,从代码组织的角度来看,将实现与其接口放在同一个包中可能不是最好的,但目前我无法理解这如何违反上述逐字 DIP 定义,具体取决于抽象。
也许对这个主题有更深入理论知识的人可以在这里帮助我
【问题讨论】:
-
“也许有人有更深的理论知识......”我认为这是对 SOLID 的普遍误解。有没有深入的了解可以解锁。整件事都是一堆废话。
-
我不同意,有点。每个 SOLID 原则都很好,其中一些对于非常广泛地理解和应用是必不可少的。它们是必要的,但我认为它们还不够,它们也不是魔法。与设计模式一样,它们更像是一种方便的方式来引用优秀开发人员应该通过经验学到的东西,但不是向新开发人员介绍和灌输这些想法的好方法。
-
@erickson 是的,说得很好。我认为我们大致同意,除了一件事:“每个 SOLID 原则都是好的”。 IMO OCP 是一个非常有害、不连贯的想法。其余的核心都还可以,但它们的构造很迟钝。
标签: java oop solid-principles design-principles dependency-inversion