![]() |
1
2
如果你的大多数类依赖于这三个接口,你可以传递一个将它们包装在一起的对象,但是:如果大多数类只依赖于其中的一个或两个,那么这不是一个好主意,因为这些类可以访问它们不需要的对象,并且它们与之没有业务往来,并且一些程序员总是调用它们的代码。不应该仅仅因为它是可用的就打电话。 顺便说一句,除非您总是在get[…]service()方法中创建一个新的对象,并且仅仅为了传递几个方法而这样做是不好的,否则它不是一个工厂。我将其称为ServiceWrapper,并将其转换为EmployeeService、DepartmentService和OrderService属性。 |
![]() |
2
4
反对这一点的一个理由是,它不能使您的依赖性变得清晰。这表明你依赖于“服务工厂里的一些东西”,而不是什么服务。为了重构的目的,确切地知道什么取决于什么可能是有帮助的。 依赖注入 应该 如果您使用的是适当的框架,那么让这类事情变得简单——应该只需要创建正确的构造函数,定义实现哪个接口的内容,并让它对所有内容进行排序。 |
![]() |
3
3
这样的工厂本质上是 服务定位器 和 I consider it an anti-pattern 因为它掩盖了你的依赖性,使你很容易违反 Single Responsibility Principle (SRP)。 我们从中获得的诸多好处之一 构造器注入 那是 it makes violations of the SRP so glaringly obvious . |
![]() |
SkarabePL · Yii2依赖注入、配置和继承 7 年前 |