gpt4 book ai didi

java - 删除没有界面的复制/粘贴代码

转载 作者:行者123 更新时间:2023-11-30 09:51:28 25 4
gpt4 key购买 nike

我有两个数据访问对象,它们是反向生成并打包供我的应用程序使用的。它们代表非常相似的表格。一张表比另一张表多了一些列。由于面向业务的数据库所有权问题,这超出了我的控制范围。

该应用程序目前有两个在这些 DAO 上运行的存储库的实现。实现非常相似。一个有一些额外的操作,对应于第二个 DAO 上的额外列。然而,除了少数异常(exception),一种实现是另一种实现的复制和粘贴。这些实现长达数百行。

所以我想删除复制/粘贴作业。理想情况下,我可以在 DAO 前面添加一个接口(interface),然后使用一个抽象类来保存共享代码(几乎所有代码)。但是,我不能在 DAO 前面放置接口(interface)。请记住它们是反向生成的,如果不升级我们的 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
}

最佳答案

我假设您对重复的代码有一定的控制权。如果您的代码生成器生成所有这些,我怀疑您需要在其 API 和配置中搜索解决方案。

当继承不起作用时,尝试组合。创建第三个类来保存共享代码(SharedCode)。为两个现有类中的每一个提供 SharedCode 类的私有(private)成员实例,并使 SharedCode 中实现的所有例程通过方法传递给成员实例。

关于java - 删除没有界面的复制/粘贴代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com