情况:模块A;模块B;服务;
模块A需要service.getSomething()模块B需要service.getSomethingSimilar()
有一些实现的变体。其中一些是:
= 1 =在模块A中实现服务,并在其中创建方法getSomething
在模块B中实现服务,并在其中创建方法getSomethingSimilar
优点:您没有模块的依赖性
缺点:因为这两种方法非常相似,所以您基本上是在复制代码。
= 2 =使用模块A中的两种方法实现服务,然后在模块B中使用该服务。
优点:没有代码重复两种方法都在同一服务中
缺点:模块相互依赖性
那么这种情况下最好的方法是什么?
我认为您可以针对此问题使用策略设计模式
具有服务接口getSomething()然后进行服务实现getSomethingImpl()
模块A和B都将为自己调整的getSomething接口提供它们自己的实现,现在,您可以将getSomethingImpl设置为两个模块的所需实现,如果需要,您可以稍后再创建新的实现。
此方法结合了两者的优点,因为它减少了冗余并减少了耦合,即彼此之间的相互依赖性
可能的缺点是,虽然代码现在更易于维护,但此实现需要一些额外的类和代码