Java 两个模块和一个服务。如何处理?
情境:Java 两个模块和一个服务。如何处理?,java,service,module,dependencies,Java,Service,Module,Dependencies,情境: 模块A;模块B;服务 模块A需要服务。getSomething() 模块B需要服务 有一些实现的变体。其中包括: =1= 在模块a中实现服务,并在其中使方法getSomething 在模块B中实现一个服务,并在其中使方法getsomethingsimilor 优点: 您不会得到模块的相互依赖性 缺点: 因为这两种方法非常相似,所以基本上是在复制代码 =2= 使用模块a中的两种方法实现服务,并在模块B中使用该服务 优点: 无代码重复 这两种方法都在同一个服务中 缺点: 模块互依性 那
模块A;模块B;服务 模块A需要服务。getSomething()
模块B需要服务 有一些实现的变体。其中包括:
=1=
在模块a中实现服务,并在其中使方法
getSomething
在模块B中实现一个服务,并在其中使方法
getsomethingsimilor
优点:您不会得到模块的相互依赖性 缺点:
因为这两种方法非常相似,所以基本上是在复制代码
=2=
使用模块a中的两种方法实现服务,并在模块B中使用该服务 优点:
无代码重复
这两种方法都在同一个服务中 缺点:
模块互依性
那么对于这种情况,什么是最好的方法呢?我认为您可以使用策略设计模式来解决这个问题 有一个服务接口getSomething() 然后创建一个服务实现getSomethingImpl() 模块A和模块B都将提供自己的实现,用于对其进行调优的getSomething接口, 现在,您可以将getSomethingImpl设置为两个模块所需的实现,如果需要,您可以稍后创建新的实现 这种方法结合了两者的优点,因为它减少了冗余并减少了耦合,即2之间的相互依赖性 可能的缺点是,虽然现在代码更容易维护,但它需要一些额外的类和代码来实现
请参阅:IMHO,模块可以相互依赖,通常情况下也是如此。因此,我将采用第二种方法,而不是重复我的代码。为该服务创建一个超级类,然后在两个分离的模块中实现差异如何?让模块
C
与服务类一起使用,并让a
和B
依赖C