我有两个数据访问对象,这些对象是反向生成的,并且可以由我的应用程序使用。它们代表非常相似的表格。一个表比另一个表有一些额外的列。由于面向业务的数据库所有权问题,这是我无法控制的。
应用程序当前有两个在这些DAO上运行的存储库实现。实现非常相似。一个有一些额外的操作,对应于第二个DAO上的额外列。但是,除了少数例外,一个实现是另一个的复制和粘贴。这些实现长达数百行。
所以我想删除复制/粘贴作业。理想情况下,我可以只是坚持一个接口在DAO的面前,那么也许使用抽象类来保存共享代码(几乎所有的话)。但是,我不能在DAO前放置一个接口。记住自己是逆向生成,无需升级我们的ORM软件,我不认为这是一个合理的选择(科多兽3.x中,我相信,这个变化是不是在范围内)。
我能想到的唯一的事情甚至会工作的一些龌龊与反思,但导致一些更糟糕的,比我现在有。
任何聪明的解决方案?
编辑:这是一个非常淡化的代码示例
package one.dao
//reverse generated
class UserDao {
getFirstName(..);
setFirstName(..);
getLastName(..);
.... 50 more just like this
}
package two.dao
//reverse generated
class UserDao {
getFirstName(..);
setFirstName(..);
getLastName(..);
.... the same 50 more as above
getSomethingElse(..); //doesn't exist in one.dao.UserDao
setSomethingElse(..); //doesn't exist in one.dao.UserDao
}
class RepositoryOne(one.dao.UserDao userDao) {
//insert code here. perform operations on nearly all methods, lots of code
}
class RepositoryTwo(two.dao.UserDao userDao) {
//insert code here. same as Repository one
//some extra code that isn't above, maybe 10 lines
}
答案 0 :(得分:2)
我假设您可以控制重复的代码。如果您的代码生成器正在生成所有代码生成器,那么您需要在其API和API中搜索解决方案。配置,我怀疑。
当继承不起作用时,请尝试合成。创建第三个类来保存共享代码(SharedCode)。为两个现有类中的每一个提供SharedCode类的私有成员实例,并使在SharedCode中实现的所有例程通过方法传递给成员实例。