php – 依赖注入:我应该注入一些东西,还是为某些对象使用服务定位器?

前端之家收集整理的这篇文章主要介绍了php – 依赖注入:我应该注入一些东西,还是为某些对象使用服务定位器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在重构基于Zend Framework的 PHP库,使用服务定位器((constructor))依赖注入(DI).我觉得它改进了我的代码很多,但我不知道我是否应该注入所有的依赖关系.一个服务定位器似乎更容易依赖,这些依赖使用了很多,而且是非特定的.我有以下依赖关系,我仍然使用服务定位器访问:

>一个Zend_Translate对象(我需要翻译各地的消息).
> Zend_Locale对象(存储当前语言)
> Zend_Config对象(很多东西都可以通过ini-file配置)
>实用程序类的实例(用于数组和字符串操作)

如果我注入了这些依赖项,那么它们会混乱我的构造函数,并分散特定依赖关系.对于测试,我可以在运行测试之前在我的服务定位器中设置这些依赖项.我中的实用主义者说我做得很好,但纯粹主义者说我应该跟DI一起去.

你会推荐DI这些类型的对象吗?

当涉及到对构造函数的混乱的关注时,最有可能的是 a code smell that the classes are violating.在这里,构造函数注入是非常有益的,因为它使得这更加明显.

有些人也担心注入很少使用的依赖关系,但是that’s not a problem either.当涉及到创建对象图时,性能很少是一个问题,即使是这样,虚拟代理模式也可以解决它.

简而言之,没有理由使用服务定位器.总有一个更好的选择涉及正确的控制倒置.

猜你在找的PHP相关文章