gpt4 book ai didi

dependency-injection - "Inversion of Control"、 "Dependency inversion"和 "Decoupling"之间的区别

转载 作者:行者123 更新时间:2023-12-03 05:32:03 31 4
gpt4 key购买 nike

我正在阅读有关依赖倒置解耦的理论,但我看不出两者之间的区别。

依赖倒置谈论解耦功能组件,以便较高级别的组件不依赖于较低级别的组件。

解耦谈论同样的事情以及如何实现它。但随后我们的 IoC 容器让事情变得更加困惑。为什么它们不被称为“依赖倒置容器”或者更好的“依赖注入(inject)容器”,因为它们提供独立组件的运行时耦合?

然后我们有控制反转。它与依赖倒置基本上是一样的,不是吗?为什么有三个术语描述同一事物?还是我瞎了?

  1. 三者有什么区别?
  2. IoC 在 IoC 容器中必须做什么?

最佳答案

解耦是一个非常普遍的原则,适用于许多领域。 依赖倒置是一种特定的解耦形式,您可以通过将系统的较高级别与较低级别分离到库中并使用接口(interface)来将它们解耦。这使您可以替换系统的较低级别部分,而无需进行重大返工。

例如,可以使用 IoC 容器来解耦对象的创建方式,而不是系统的较高级别部分创建较低级别类的具体实例。

控制反转是框架库使用的一种设计原则,允许框架从应用程序重新获得一些控制权。即,当某些用户界面事件发生时,窗口框架可以回调应用程序代码。马丁·福勒 (Martin Fowler) 使用“好莱坞原则”一词,如“不要调用我们,我们会调用您”。解耦是控制反转的重要组成部分。

但是IoC 容器与控制反转有什么关系呢? To quote Martin Fowler :

Inversion of Control is too generic a term, and thus people find it confusing. As a result with a lot of discussion with various IoC advocates we settled on the name Dependency Injection.

(请注意,Martin Fowler 讨论的是依赖注入(inject),而不是依赖倒置。)

IoC 容器有助于实现依赖注入(inject),也许更好的术语是依赖注入(inject)容器。然而,IoC 容器的名称似乎仍然存在。依赖注入(inject)是依赖反转的一个重要组成部分,但是使用 IoC 容器进行依赖注入(inject)可能会令人困惑,因为控制反转是一个更广泛、更通用的原则。

您指出命名不太一致,但这并不奇怪,因为这些术语是独立发明和使用的,即使它们重叠。

关于dependency-injection - "Inversion of Control"、 "Dependency inversion"和 "Decoupling"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912504/

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