我最终得到了一个看起来像这样的构造函数,同时试图得到一个我可以轻松测试的对象。
public UserProvider(
IFactory<IContainer> containerFactory,
IRepositoryFactory<IUserRepository> userRepositoryFactory,
IFactory<IRoleProvider> roleProviderFactory,
IFactory<IAuthenticationProvider> authenticationProviderFactory,
IFactory<IEmailAdapter> emailAdapterFactory,
IFactory<IGuidAdapter> guidAdapterFactory,
IRepositoryFactory<IVehicleRepository> vehicleRepositoryFactory,
IRepositoryFactory<IUserVehicleRepository> userVehicleRepositoryFactory,
IFactory<IDateTimeAdapter> dateTimeAdapterFactory)
这是对象将拥有的所有依赖项,也是我拥有的最繁忙的构造函数。但是,如果有人看到这个,它真的会引起很大的 wtf 吗?
我的目标是最终得到易于测试的逻辑。虽然它需要大量的模拟,但验证我的逻辑当然很容易。但是我担心我可能会得到太多的好东西。
我很好奇这对于大多数实施 ioc 的人来说是否正常。
我可以做一些简化——比如我真的不需要为几个适配器传递工厂,因为我可以直接传递适配器,因为它没有内部状态。但我真的是在询问参数的数量。
或者更重要的是,我正在寻找我不会过火的保证;)
但是我开始得到这样的印象,即 UserProvider 类应该被分解一下——但后来我得到了更多的管道,这就是导致这种担忧的原因。
我想一个子问题是,如果我有这些顾虑,我是否应该考虑使用服务定位器模式?