gpt4 book ai didi

dependency-injection - Dependency Injection,将一个 "injectable"的对象(服务)注入(inject)到一个newable(实体)中

转载 作者:行者123 更新时间:2023-12-04 08:23:02 32 4
gpt4 key购买 nike

在编写代码时,我们应该能够识别两大类对象:

  • 注入(inject)剂
  • 新品

  • http://www.loosecouplings.com/2011/01/how-to-write-testable-code-overview.html

    http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/
  • 可注入(inject)对象是在其构造函数中公开依赖关系的对象(服务),这些依赖关系通常使用 IoC 容器解决,这些对象只能在其构造函数中请求其他可注入(inject)对象
  • Newable 是在其构造函数中也暴露依赖关系的对象,但 newables 只能请求其他 newable 对象(实体、值对象),newable 对象的另一个特征是它们不应持有对可注入(inject)对象的引用

  • 但是在写代码的时候,我们经常需要将一个服务(injectable)“注入(inject)”到一个Entity(newable)中

    我一直在想,也许在可更新对象中公开服务依赖项最好在方法级别进行,但这听起来需要做很多工作......只是在每次调用方法时考虑解决依赖关系...... . 这闻起来就像我们必须使用服务定位器反模式

    我解决这个问题的方法是:
  • 使用暴露依赖的方法创建接口(interface)(该方法中将使用服务)
  • 为接口(interface)创建一个扩展方法并将其放置在不同的命名空间中,可能在另一个程序集中,然后将调用包装到使用服务定位器解决依赖关系的原始方法

  • 这样做,我们可以在新对象和可注入(inject)对象之间保持一致的分离,并且能够轻松地在我们的新对象中使用服务
  • 你怎么看?
  • 在扩展方法中使用服务定位器被认为是一种不好的做法?
  • 您将如何对扩展方法调用进行单元测试?
  • 最佳答案

    But when writing code, we often need to "inject" a service (injectable) into an Entity (newable)



    情况并非如此 - 如果您发现需要这样做,那么实体中存在一些应该在服务中的功能。

    假设你的newable是 ShoppingCart你的注入(inject)剂是一个数据库 repository .您希望能够做到这一点:
    // somehow cart already got the repository
    cart.save();

    好吧,你做错了。相反,您需要切换并执行以下操作:
    respository.save( cart );

    如果您可以提供您认为有必要这样做的情况,我们可以讨论该情况的具体情况。

    关于dependency-injection - Dependency Injection,将一个 "injectable"的对象(服务)注入(inject)到一个newable(实体)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9700890/

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