在问这个问题之前,我想说stackoverflow中的这个问题与我的问题非常相似,但这个概念仍然不清楚很混乱。
我试图理解依赖倒置原理,但我无法完全理解它?
以下是 DIP 所说的两点
A. 高级模块不应该依赖于低级模块。两者都应该依赖于抽象。B. 抽象不应该依赖于细节。细节应该取决于抽象。
我可以掌握第一点,但我无法掌握第二点,看起来两者都一样。在 stackoverflow 和其他网站中进行大量搜索后,我能够理解两者都试图说不同的东西,但我无法理解。
让我们考虑一个例子:
让我们考虑用于计算员工工资的 SalaryCalculator 类[高级模块]。它使用 BonusCalculator [高级模块] 来计算工资,如下所示。由于 SalaryCalculator 使用的是 BonusCalculator,它违反了“高级模块不应该依赖于低级模块”的第一点。两者都应该依赖于抽象”。
所以我们在两者之间引入了抽象,如下所示:
这里的细节[低级和高级模块]依赖于抽象,而抽象不依赖于细节。那么在 DIP 中,第二点试图说明什么? 如果两者都相同,为什么将其设为两点?
如果有人给我一个代码示例,那将非常有用。