V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
feng32
V2EX  ›  程序员

请教一个 Java 代码重构问题

  •  
  •   feng32 · 2018-09-24 19:39:27 +08:00 · 2780 次点击
    这是一个创建于 2237 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有两个自动生成的 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 ...
    }
    

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

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

    12 条回复    2018-09-25 09:09:27 +08:00
    luban
        1
    luban  
       2018-09-24 19:44:18 +08:00 via iPhone
    bean 复制,Spring 有 beanutils,或者用 dozer 也行
    johnniang
        2
    johnniang  
       2018-09-24 19:47:47 +08:00 via Android
    合理利用反射
    bxb100
        3
    bxb100  
       2018-09-24 19:52:50 +08:00 via Android
    1l 正解
    lhx2008
        4
    lhx2008  
       2018-09-24 19:59:41 +08:00 via Android
    既然是自动生成的,反射走起吧
    narcotics
        5
    narcotics  
       2018-09-24 20:35:57 +08:00 via Android
    ymj123
        6
    ymj123  
       2018-09-24 21:06:38 +08:00 via Android
    shell 写多了直接想到 ses -i
    fleam
        7
    fleam  
       2018-09-24 21:06:51 +08:00 via iPhone
    说实话没看懂……太多重复的东西明确业务边界,可以抽象成一个公共的方法,否则就写成两个……
    shalk
        8
    shalk  
       2018-09-24 21:09:11 +08:00 via iPhone
    适配器模式
    micean
        9
    micean  
       2018-09-24 21:19:02 +08:00   ❤️ 3
    如果是 2 个不相干但是代码恰好相同的业务,那你别去动它
    如果以后其中 a 业务发生变化,直接修改代码即可,而不是要去考虑分解不相干的 b 业务
    wdlth
        10
    wdlth  
       2018-09-24 21:25:22 +08:00
    可以用 AOP,尽量不要动原来的代码。
    lrh3321
        11
    lrh3321  
       2018-09-25 08:27:41 +08:00
    自动生成的,还是不相干的两个类,那就放着别管。
    chocotan
        12
    chocotan  
       2018-09-25 09:09:27 +08:00
    beanutil+1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2530 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.