gpt4 book ai didi

oop - Dependency inversion principle[DIP]中的 "Abstractions should not depend on details. Details should depend on abstractions"是什么意思?

转载 作者:行者123 更新时间:2023-12-05 08:41:02 27 4
gpt4 key购买 nike

在问这个问题之前,我想说 this stackoverflow 中的问题与我的问题非常相似,但概念仍然不清楚,非常困惑。

我想了解依赖倒置原则,但我无法完全理解它?

下面是DIP说的两点

A. High-level modules should not depend on low-level modules. Both should depend on abstractions. B. Abstractions should not depend on details. Details should depend on abstractions.

我能掌握第一点,但我无法掌握第二点,看起来两者是一样的。在 stackoverflow 和其他网站上进行大量搜索后,我能够理解两者都在尝试说不同的事情,但我无法理解。

让我们考虑一个例子:

让我们考虑用于计算员工工资的 SalaryCalculator 类 [高级模块]。其中使用 BonusCalculator [高级模块] 来计算薪水,如下所示。由于 SalaryCalculator 使用 BonusCalculator,它违反了 “高级模块不应依赖于低级模块”的第一点。两者都应该依赖于抽象。”

enter image description here

所以我们在两者之间引入了抽象,如下所示:

enter image description here

这里的细节[低级和高级模块]依赖于抽象,而抽象不依赖于细节。那么在 DIP 中,第二点试图说明什么? 如果两者相同,为什么将其设为两点?

如果有人给我一个代码示例,那将非常有用。

最佳答案

让我们进一步分解 B 部分。

抽象不应依赖于细节。这可能意味着您的接口(interface)声明(您的抽象)应避免包含具体类型。想一想 distance(int X1, int Y1, int X2, int Y2)distance(Point A, Point B) 之间的区别。如果您有在浮点、纬度/经度或极坐标系中测量的坐标怎么办?如果换成3D空间呢?您必须重新实现每个使用距离函数的例程。

细节应该依赖于抽象。在可行的情况下,继续使用抽象层来避免对具体类型的依赖。

一切都是为了尽量减少变化的影响。您的代码对其他事物的依赖越少,其他代码的更改就越多。

关于oop - Dependency inversion principle[DIP]中的 "Abstractions should not depend on details. Details should depend on abstractions"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52857145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com