我们在代码库中严格坚持控制的反转,但这会产生令人毛骨悚然的构造函数(是的,我知道这意味着我们的类不够紧密,这是一项正在进行的工作)。
事实是,有时这些依赖项非常愚蠢,例如可以进行日期模拟的DateTime包装器,记录器或TaskFactory包装器,它们与类的业务没有直接关系,因此我认为它们不需要显式介绍。
我们是否可以通过对整个系统中传递的那些项目使用服务定位器来减轻ctor的负担?缺点是什么?
最佳答案
我们是否可以通过对整个系统中传递的那些项目使用服务定位器来减轻ctor的负担?
不,依赖项仍然存在,但是现在不是隐式的,而是隐式的。
只要您具有too many constructors arguments, at least you know that you have a problem。如果引入服务定位器,您仍然会遇到所有原始问题,但是现在您也violated encapsulation。您仅使基本问题更难发现,而没有解决任何问题。
Service Locator is a bona fide anti-pattern;它什么也解决不了。