【发布时间】:2011-06-08 05:35:30
【问题描述】:
我有两个反向生成的数据访问对象,它们被 jar'ed 以供我的应用程序使用。它们代表非常相似的表。一个表比另一个表有一些额外的列。由于面向业务的数据库所有权问题,这超出了我的控制范围。
应用程序当前有两个在这些 DAO 上运行的存储库实现。实现非常相似。一个有一些额外的操作,对应于第二个 DAO 上的额外列。然而,除了少数例外,一种实现是另一种实现的复制和粘贴。实现长达数百行。
所以我想删除复制/粘贴作业。理想情况下,我可以在 DAO 前面添加一个接口,然后可能使用抽象类来保存共享代码(几乎所有代码)。但是,我不能在 DAO 前面放置一个接口。请记住它们是反向生成的,如果不升级我们的 ORM 软件,我认为这不是一个合理的选择(我相信 Kodo 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
}
【问题讨论】:
-
你能发布一个简单\淡化的代码示例吗?
标签: java