gpt4 book ai didi

java - 控制反转与好莱坞原则的混淆

转载 作者:行者123 更新时间:2023-11-30 18:17:25 25 4
gpt4 key购买 nike

我正在阅读 Head First Design 模式并且坚持好莱坞原则。早些时候,我读到了控制反转,我的理解是,它是一种设计原则(有些人也称之为模式),通过它传统的程序流程从“高层模块调用低层模块”变为“底层模块调用高层模块”(通常通过抽象),所以我们可以对特定的底层模块有非常低的依赖,改变底层模块不会对我们的高层或靠近业务模块。

但是当作者说到好莱坞原则的以下几行时,我感到困惑:-

第 296 页

根据好莱坞原则,我们允许低级组件将自己挂接到系统中,但是高层组件决定何时需要它们以及如何使用它们。在换句话说,高层组件给低层包含“不要调用我们,我们会调用你”的待遇。

在最后一行,据说高级组件给低级组件“不要调用我们,我们会调用你”。这意味着我们的高级组件实际上是在调用低级组件,因此这似乎违反了控制反转原则和依赖反转原则。

请澄清这一点。

最佳答案

如果我们关注依赖倒置原则的不同部分,表面上的矛盾就会消除:

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

这增加了一些上下文来消除这个声明造成的潜在混淆:

The high-level components give the low-level components a “don’t call us, we’ll call you” treatment.

高级组件根本不直接处理低级组件。它们处理表示低级组件的目的或功能的抽象。

因此它不会“破坏”依赖倒置原则。相反,只需要根据该原则来理解它。它们是两个不同的原则,所以我们可以应用一个而打破另一个。但是,如果组件以抽象表示的方式相互通信,那么我们可以应用两者。

他们本可以在有问题的句子中添加该说明,但这会使它变得更加冗长和困惑。


FWIW 我经常发现术语“高级”和“低级”令人困惑,因为除了在讨论依赖倒置原则时,我们不倾向于使用它们。组件是“高级”还是“低级”,建议取决于抽象。换句话说,依赖于抽象。我们可以在不将组件分类为高级或低级的情况下应用该原则。

关于java - 控制反转与好莱坞原则的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786221/

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