我们的系统有很多模型对象(例如Car
,Pedestrian
,Road
,...)
目前,他们所有人都有经理(CarManager
,PedestrianManager
,RoadManager
)返回相应类别的单身人士。
建议的替代方案是拥有一个ManagerFactory
单例,可以返回CarManager
,PedestrianManager
,RoadManager
的实例。 (例如ManagerFactory.getInstance().getCarManager()
)
我们还为项目编写测试,关注的是如果我们将使用依赖注入,我们将需要一个实际的对象实例来注入管理器。
这个替代品是好的吗?在这种情况下你会将单身人士变成其他东西吗?
答案 0 :(得分:0)
单件直接或单件工厂基本上是相同的东西 - 对某物的不透明引用 - 隐藏的依赖。通过全局文本搜索,您可以找到这些依赖关系,因此这两种选项都不会使情况变得更好或更糟。
依赖注入意味着您公开声明例如A工作它需要B的实例(或者符合协议C的实例是更好的依赖情况)。这要求您在某处实例化B并将其传递给A。
从测试的角度来看,依赖注入要优越得多,因为您通常希望创建B的模拟版本并使用它来测试A.测试会注入要使用的实例。测试单身是一种痛苦......
因此,理想情况下,涉及的第一个类将创建一个B实例并将其传递给需要它的其他类,并从那里传递该实例。