我一直在开发的一个Java项目需要与多个关系型数据库管理系统集成。为了减少处理它们时的代码重复,我们最明显的方法是创建一个类型继承结构,类似于:
ThirdPartySoftware (superclass)
/|\
/ | \
TPS1 2 3
然而,这种方法导致TPS1、TPS2和TPS3的实现非常相似(但并不完全相同!)。如果将所有功能都放入超类中,超类必须意识到每个地方可能会有所不同,这就破坏了子类化所要带给我们的封装性。
我们考虑的一种方法是通过它们共享的特性来表示DB,比如“支持特性X”和“无法执行特性Y”。然而,不太清楚代码最终是否变得更易于维护,因为:
1.许多怪癖只适用于一个DB。
2.我们想不出足够的共享/可比较(基本上是可抽象的)特征,使其具有价值。
有没有其他建议可以减少子类之间的代码重复,也许使用设计模式?