我一直在研究的Java项目与几个RDBMS集成在一起。我们在处理它们的方式之间减少代码重复的最明显的方法是创建类型层次结构:
ThirdPartySoftware (superclass)
/|\
/ | \
TPS1 2 3
然而,这种方法最终导致TPS1,TPS2和TPS3的实现非常相似(但并不完全!)。如果没有超类基本上意识到某些东西可能不同的地方,很难将所有功能都引入超类中,打败封装子类就意味着购买我们。
我们考虑过的一种方法是通过它们共享的功能来表示数据库,例如“支持功能X”和“不能执行功能Y”,但是并不完全清楚代码最终会更易于维护那样因为:
有没有人有其他建议可以减少子类之间的代码重复,可能使用设计模式?
答案 0 :(得分:5)
http://en.wikipedia.org/wiki/Bridge_pattern
只关注你的情况,但无论如何,你的工作是找出什么是API。
也许,org.hibernate.dialect.Dialect会给你一些新的想法。
答案 1 :(得分:0)
我不是一个java人,但除了超类/抽象类,你可以使用接口和dependency injection以及repository pattern。这些模式不是独占的,我经常有接口实现,它们是主类的子类,如
SqlDataAccess:BaseDataAccess,IDataAccess和TPSDataAccess:SqlDataAccess,ITPSDataAccess