3

我一直在从事的一个 Java 项目与多个 RDBMS 集成。我们减少处理它们的方式之间的代码重复的最明显方法是创建一个类型层次结构,例如:

               ThirdPartySoftware (superclass)
                      /|\
                     / | \
                 TPS1  2  3

然而,这种方法最终导致 TPS1、TPS2 和 TPS3 的实现非常相似(但不完全如此!)。如果超类本质上没有意识到可能有所不同的每个地方,就很难将所有功能拉入超类,击败封装子类意味着要收买我们。

我们考虑过的一种方法是用它们共享的特性来表示数据库,例如“支持特性 X”和“不能做特性 Y”,但是并不完全清楚代码最终会以这种方式更易于维护,因为:

  1. 许多怪癖只适用于一个数据库。
  2. 我们想不出足够多的共享/可比较(基本上是抽象的)特性来使这变得有价值。

有没有人对我们可以减少子类之间的代码重复的方法有其他建议,也许使用设计模式?

4

2 回答 2

5

http://en.wikipedia.org/wiki/Bridge_pattern

只适合您的情况,但无论如何,找出 API 是什么是您的工作。

也许,org.hibernate.dialect.Dialect 会给你一些新的想法。

于 2013-04-04T16:00:47.360 回答
0

我不是 java 人,但除了超类/抽象类之外,您还可以使用接口和依赖注入以及存储库模式。这些模式不是唯一的,我经常有接口实现是主类的子类,例如

SqlDataAccess:BaseDataAccess、IDataAccess 和 TPSDataAccess:SqlDataAccess、ITPSDataAccess

于 2013-04-04T16:30:02.227 回答