Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除重复代码的模式_Java_Oop_Design Patterns_Code Duplication - Fatal编程技术网

Java 删除重复代码的模式

Java 删除重复代码的模式,java,oop,design-patterns,code-duplication,Java,Oop,Design Patterns,Code Duplication,我一直在研究的一个Java项目与几个RDBMS集成。对于我们来说,减少代码重复的最明显的方法是创建一个类型层次结构,如: ThirdPartySoftware (superclass) /|\ / | \ TPS1 2 3 然而,这种方法最终导致TPS1、TPS2和TPS3的实现非常相似(但不完全相同!)。如果超类没有意识到每一个地方都可能有

我一直在研究的一个Java项目与几个RDBMS集成。对于我们来说,减少代码重复的最明显的方法是创建一个类型层次结构,如:

               ThirdPartySoftware (superclass)
                      /|\
                     / | \
                 TPS1  2  3
然而,这种方法最终导致TPS1、TPS2和TPS3的实现非常相似(但不完全相同!)。如果超类没有意识到每一个地方都可能有不同之处,那么很难将所有功能都引入到超类中,破坏封装子类化就是为了给我们带来好处

我们考虑过的一种方法是通过DBs共享的特性来表示DBs,例如“支持特性X”和“不能执行特性Y”,但是不完全清楚代码是否会以这种方式更易于维护,因为:

  • 许多怪癖只适用于一个DB
  • 我们想不出足够多的共享/可比(基本上是可抽象的)特性来让这一切变得有价值
  • 有没有人对我们减少子类之间的代码重复(可能使用设计模式)有其他建议?

    寻找只是为了你的情况,但无论如何,它将是你的工作,找出什么是API


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

    我不是一个java爱好者,但是除了超类/抽象类之外,你还可以使用接口和。这些模式不是排他性的,我经常有接口实现,它们是主类的子类,例如


    SqlDataAccess:BaseDataAccess、IDataAccess和TPSDataAccess:SqlDataAccess、ITPSDataAccess

    如果没有可以抽象出来的代码,那么我认为您只需要写出它。对于可以抽象出来的特性,可能会有用。Scala在特性方面做得很好。关于stackoverflow,一些人提出了Java中的mixin/traits实现,例如,或者仅仅是一个想法——为什么不使用hibernate或其他ORM框架。我对这个问题的措辞有点含糊不清,但我们正在对数据库和底层数据库文件执行管理操作,而不是在其中存储对象,不幸的是,ORM在这种情况下帮不了我们。