我正在阅读Head First Design模式,只是停留在好莱坞原则上。较早之前,我了解到控制反转,这是一种设计原理(有人也称其为模式),通过该原理,常规程序流程从“上层模块调用下层模块”变为“下层模块调用上层模块” ”(通常通过抽象),因此我们可以对特定的低级模块具有非常低的依赖性,并且更改低级模块不会对我们的较高级别或接近业务模块产生任何影响。

但是当作者对好莱坞原则说以下话时,我感到困惑:

在第296页

根据好莱坞原则,我们允许使用低级组件
将自己吸引到一个系统中,但是高层
组件确定何时需要它们以及如何使用它们。在
换句话说,高层次的组件给低层次的
组成“不给我们打电话,我们给您打电话”的待遇。


在最后一行中,据说高级组件为低级组件
组成“不给我们打电话,我们给您打电话”的待遇。
这意味着我们的高级组件实际上正在调用低级组件,因此
这似乎打破了控制反转原则和依赖反转原则。

请对此进行澄清。

最佳答案

在设计软件时,我们实现了API和Framework两方面的功能。

API发布了一些终结点,以便调用者使用这些终结点来获取一些有用的信息,因此调用者没有采取任何操作点,只有终结点和输出即可。

该框架从调用者那里获取策略或业务实现,并在需要时调用它。

在好莱坞原则中,我们可以提供我们的策略或业务实现,表示框架的实现,在需要时将其称为联合策略。

控制和依赖注入(inject)的反转是为了删除应用程序的依赖。这使得系统更加分离和可维护。

如果您回到过去的计算机编程时代,程序流通常会在自己的控件中运行。

如果您仔分割析程序流程,它是顺序的。该程序由自己控制。控制权的反转意味着程序将控制权委托(delegate)给其他将插入流程的人。

09-30 15:53
查看更多