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