gpt4 book ai didi

oop - 为什么依赖注入(inject)比使用工厂更好?

转载 作者:行者123 更新时间:2023-12-04 14:35:26 27 4
gpt4 key购买 nike

我一直在阅读依赖注入(inject),并且我理解在 XML 中指定依赖项的吸引力,就像在许多框架中所做的那样。我在一个大型系统上工作,我们通常调用工厂来获取具体对象,并且正在努力理解为什么手动注入(inject)依赖项,如图所示 in this Wikipedia article据说更好。

在我看来,调用工厂更好,因为:

  • 调用代码不需要知道或关心是否存在特定的依赖项。
  • 如果向被调用者添加了新的依赖项,则调用代码不需要更改。
  • 调用代码不需要任何专门用于选择要注入(inject)的具体实例的逻辑。

  • 在我看来,依赖注入(inject)仅在调用代码必须决定依赖的具体类时才提供好处。几乎就像“这是我的数据,现在处理它”。

    有什么我错过的吗?

    更新:
    澄清一下,我们现有的代码大多是直接调用工厂。所以要获得一个新的 Ball 对象,你会看到如下代码:
    Ball myBall = BallFactory.getObject();

    许多这些工厂被实现为允许新的具体对象类型的运行时注册 - 一个插件框架。

    因此,在查看了一些初始注释之后,似乎使用 DI 我的调用代码通常不会传入 Ball 对象,而是传入 BallFactory。我想这样做的好处是该类可能更通用,因为它甚至没有与它使用的工厂耦合。

    最佳答案

    依赖注入(inject)有助于单元测试。它允许您分离和隔离类的功能,因为它的任何依赖项都可以注入(inject)(因此也可以模拟)到类中。如果依赖项访问外部资源(例如 DB),这将特别有用。

    我最近读了一篇文章,展示了依赖注入(inject)在测试中的优势。它专门针对静态方法,但同样适用于工厂。

    http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/

    就像@deceze 说的那样,如果你注入(inject)你的工厂,你就会两全其美......

    关于oop - 为什么依赖注入(inject)比使用工厂更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007197/

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