请教一个 Java 代码重构问题

2018-09-24 19:39:27 +08:00
 feng32

有两个自动生成的 class: A 和 B,由于是自动生成的,我们无法对其进行修改

同时 A 和 B 在类、接口层次结构上也没有任何关系,但是它们的成员和方法恰巧是完全一样的

我们需要在代码中,对其进行一些处理

void dealWithA(A a) {
    ... a.member1 ... a.member3 ... a.member6 ...
}

void dealWithB(B b) {
    ... b.member1 ... b.member3 ... b.member6 ...
}

这些处理函数可能也就十几行,但是里面的内容却是完全一样的,因此看起来很不舒服

大家遇到过这样的问题吗?请问在这种情况下,用什么方法可以以最低的 (或者一个合适的) 成本消除重复代码?

2655 次点击
所在节点    程序员
12 条回复
luban
2018-09-24 19:44:18 +08:00
bean 复制,Spring 有 beanutils,或者用 dozer 也行
johnniang
2018-09-24 19:47:47 +08:00
合理利用反射
bxb100
2018-09-24 19:52:50 +08:00
1l 正解
lhx2008
2018-09-24 19:59:41 +08:00
既然是自动生成的,反射走起吧
narcotics
2018-09-24 20:35:57 +08:00
ymj123
2018-09-24 21:06:38 +08:00
shell 写多了直接想到 ses -i
fleam
2018-09-24 21:06:51 +08:00
说实话没看懂……太多重复的东西明确业务边界,可以抽象成一个公共的方法,否则就写成两个……
shalk
2018-09-24 21:09:11 +08:00
适配器模式
micean
2018-09-24 21:19:02 +08:00
如果是 2 个不相干但是代码恰好相同的业务,那你别去动它
如果以后其中 a 业务发生变化,直接修改代码即可,而不是要去考虑分解不相干的 b 业务
wdlth
2018-09-24 21:25:22 +08:00
可以用 AOP,尽量不要动原来的代码。
lrh3321
2018-09-25 08:27:41 +08:00
自动生成的,还是不相干的两个类,那就放着别管。
chocotan
2018-09-25 09:09:27 +08:00
beanutil+1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/492136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX