Oop 依赖性反转原理的第二种表述
依赖性倒置原则的第二个陈述指出: “抽象不应该依赖于细节,细节应该依赖于 基于抽象。” 在这种情况下,“细节”是什么意思?我更喜欢思考诸如“我想要得到什么结果”之类的抽象概念,以及诸如“我想要怎样得到结果”之类的细节Oop 依赖性反转原理的第二种表述,oop,design-patterns,dependency-injection,Oop,Design Patterns,Dependency Injection,依赖性倒置原则的第二个陈述指出: “抽象不应该依赖于细节,细节应该依赖于 基于抽象。” 在这种情况下,“细节”是什么意思?我更喜欢思考诸如“我想要得到什么结果”之类的抽象概念,以及诸如“我想要怎样得到结果”之类的细节 这一原则意味着细节的改变(如对象的生命周期、算法、精度等)不会改变抽象。我对此的理解是,它与第一条原则密切相关,即“高级模块不应依赖于低级模块,两者都应依赖于抽象”。这一功能的实现通常采用一个接口的形式,您的高级和低级类都使用该接口来相互通信 这基本上已经遵循了第二个原则,因为我们
这一原则意味着细节的改变(如对象的生命周期、算法、精度等)不会改变抽象。我对此的理解是,它与第一条原则密切相关,即“高级模块不应依赖于低级模块,两者都应依赖于抽象”。这一功能的实现通常采用一个接口的形式,您的高级和低级类都使用该接口来相互通信 这基本上已经遵循了第二个原则,因为我们的细节,即使用该接口的类的具体实现,现在取决于一个抽象,即类现在使用的接口 此外,抽象现在不再依赖于类本身,因为它们现在位于两个类都已实现的接口后面,因此可以自由更改(当然,签名除外),而无需对具体实现的细节进行必要的更改
我不认为我已经像我喜欢的那样清楚了,但我希望这有帮助 抽象可以是行为方面,可以通过使用接口方面的代码来使用。任何高级或低级的类/代码都将使用抽象而不是运算符进行通信。这些课程被定义为“细节”。让我试着分享我的观点 我相信这个术语通常用于两个组件a和B之间的关系(a使用B,a->B)。所以,仅仅是“抽象”对我来说毫无意义。有意义的是“从A的角度抽象B” 我试图建立一个严格的定义(或多或少): 如果A使用B,那么从A的角度对B的抽象是最小的和足够的信息集A必须了解B才能正确使用它
- 最小值:如果您的抽象包含smth A,则可以省略-您的模块A正在使用B的详细信息。这很糟糕。B的作者可能决定更改它,这将导致通信中断
- 充分:如果A不能正确使用B,而没有一些不是你“抽象”的东西,这意味着它应该成为你抽象的一部分
我相信这个术语(细节,抽象)的主要目标是一种快速的方式来提及你可以在不中断a->B交流的情况下(细节)改变的东西,或者在一个适当的a->B用例中你不能改变那么简单(抽象)的东西。如果你没有遵守定义的第二部分,你就是在实现。