gpt4 book ai didi

php - 依赖注入(inject) : should I inject everything or use a service locator for some objects?

转载 作者:可可西里 更新时间:2023-10-31 23:06:26 26 4
gpt4 key购买 nike

我目前正在重构基于 Zend Framework 的 PHP 库,从使用服务定位器到(构造函数)依赖注入(inject) (DI)。我觉得它大大改进了我的代码,但我不确定是否应该注入(inject)所有依赖项。对于经常使用且不特定的依赖项,服务定位器似乎更容易。我有以下依赖项,我仍然使用服务定位器访问它们:

  1. 一个 Zend_Translate 对象(我需要在任何地方翻译消息)。
  2. 一个 Zend_Locale 对象(存储当前语言)
  3. 一个 Zend_Config 对象(很多东西都可以通过 ini 文件配置)
  4. 实用类实例(用于数组和字符串操作)

如果我注入(inject)这些依赖项,它们会使我的构造函数困惑并分散对特定依赖项的注意力。对于测试,我可以在运行测试之前在我的服务定位器中设置这些依赖项。我的实用主义者说我做得很好,但纯粹主义者说我应该一路走下去。

您是否会为这些类型的对象推荐 DI?

最佳答案

当谈到使构造函数困惑的问题时,最有可能的是 a code smell that the classes are violating Single Responsibility Principle .构造函数注入(inject)在这里非常有用,因为它使这一点更加明显。

有些人还担心注入(inject)很少使用的依赖项,但是 that's not a problem either .在创建对象图时,性能很少成为问题,即使是,虚拟代理模式也可以解决它。

简而言之,没有理由使用服务定位器。总是有更好的选择,涉及适当的控制反转。

关于php - 依赖注入(inject) : should I inject everything or use a service locator for some objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9716946/

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