gpt4 book ai didi

dependency-injection - 为什么注入(inject)类而不是接口(interface)被认为是不好的做法?

转载 作者:行者123 更新时间:2023-12-04 16:38:54 25 4
gpt4 key购买 nike

将类注入(inject)其他类被认为是不好的,一些论点是很难模拟一个类并且它将对象耦合在一起。

但是我看到许多开发人员每天都这样做,并且大多数模拟框架都非常擅长模拟类并提供测试模拟,那么问题是什么?

最佳答案

某些(有影响力的)人,比如 Robert Martin 声称,在源代码中使用具体类的名称基本上是应该避免的,以防止“耦合太紧”。

让我引用他关于“敏捷原则”的书:

高级模块不应该依赖于低级模块。两者都应该依赖于抽象。
抽象不应依赖于细节。细节应该取决于
抽象

并进一步:

考虑依赖于低级模块的高级模块的含义。它是包含应用程序的重要策略决策和业务模型的高级模块。这些模块包含应用程序的标识。然而,当这些模块依赖于低级模块时,对低级模块的更改会直接影响高级模块,并可能迫使它们依次更改。
这种困境是荒谬的!应该影响低级详细模块的是高级策略设置模块。包含高级业务规则的模块应该优先于并独立于包含实现细节的模块。高级模块根本不应该以任何方式依赖于低级模块。

但当然,在现实中,总是存在平衡。当你非常确信

  • 你的类(class)很可能不会随着时间的推移而改变
  • 你的类不是最终的,你可能想要模拟的方法也不是最终的

  • 那么选择接口(interface)而不是类没有多大意义。

    但是 - 如果有疑问,接口(interface)是更好的方法。

    我不得不经常向人们解释他们使用 PowerMock 来模拟一些最终类/方法的想法是错误的方法;更好的答案是将参数的类型更改为某个接口(interface)。

    关于dependency-injection - 为什么注入(inject)类而不是接口(interface)被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829122/

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