【问题标题】:Avoid passing around service/manager objects避免传递服务/管理器对象
【发布时间】:2018-02-06 05:12:32
【问题描述】:

我有一个依赖于多个其他服务类的服务类。

class Service1 {
}
class Service2 {
}
class Service3 {
}
class Service4 {
}

class Service5 {
   public Service5(Service1 s1, Service2 s2, Service3 s3, Service4 s4);
}

是否有一种设计模式/最佳实践可以避免将多个服务传递给 Service5 构造函数。 当其他服务(service1、service2 等)需要调用 service5 执行某些操作时,它会变得复杂,因为它会导致循环依赖。

我能想到的一个解决方案是拥有一个 ServiceCollection 静态类,在该类上拥有所有服务的 getter。

【问题讨论】:

  • 服务应该相互独立。循环依赖可能表明您的服务太大并且做得太多。您还可能在应用程序中缺少一个 dispatch 层,它将服务的调用与其逻辑分开。

标签: java design-patterns


【解决方案1】:

我能想到的一个解决方案是拥有一个 ServiceCollection 静态类 上面有所有服务的吸气剂。

应该避免使用静态方法来检索Service 对象。这使得它们的依赖关系没有明确定义,并且可以根据用户类进行切换。

因此,作为替代方案,您可以定义一个提供实例方法来检索Service 实例的工厂类。

就我个人而言,我宁愿使用依赖注入来解决这个问题。这样一来,您的样板代码就会更少,并且整个代码中不会有分散的工厂方法调用。

当其他服务(服务 1、服务 2 等)时,它会变得复杂, 需要调用 service5 进行某些执行,因为它可能导致循环 依赖。

如果您的类实例化存在循环依赖关系,您应该重新考虑您的实际设计。

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多