Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 依赖性反转原理的第二种表述_Oop_Design Patterns_Dependency Injection - Fatal编程技术网

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用例中你不能改变那么简单(抽象)的东西。

如果你没有遵守定义的第二部分,你就是在实现。