开发者社区> 问答> 正文

如何重构现有代码

首先描述下问题场景
有开源项目A,我们拿到A之后在其上面做了很多改动,包括bug fix,new feature,暂且把它叫做内部版本B。导致的问题就是A原生的code和B修改的code大量穿插在一起,因为A会不时地有版本更新,我们需要将A的更新merge到B上来,但是因为代码大量穿插在一起,在merge的时候会有非常多的冲突,导致effort很大。现在是希望对B做重构,尽量保留A原有的code,将bug fix,new feature之类的改动都独立出来。查阅了一些资料,不确定有哪种方法可以做到这一点。目前暂时的做法是通过继承,所有要改的东西完全在子类中进行,尽可能保持A不动,这样就会有很多方法需要重写,带来的问题是A和B会有很多重复的代码
请各位前辈指教,有没有什么好的办法

展开
收起
蛮大人123 2016-02-26 18:03:33 2244 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    每次对开源代码进行修改的时候,都拉去最新代码到自己branch代码中,如下:
    1、git fetch remote master
    2、git merge remote master
    然后再进行自己的修改,但是如你所说修改比较大,那么一般的做法是进行“一刀切”的方式,
    在开源项目中找到一个较稳定的版本,然后clone独立出来自己开发,以后不再合并最新代码。
    但如果开源项目代码质量写的比较好,那么完全可以每次合并最新代码,因为面向对象的原则是“修改关闭,扩展开放”。
    个人有以下建议:
    1、对于开源项目若存在的bug,你可以修改原代码,然后merge request到开源项目中,贡献你的一份微薄之力。
    2、自己扩展功能,完全遵循“修改关闭,扩展开放”的方式,即通过设计模式如代理、模板等完全足以。
    3、你自己的repository中存在以下branch:
    A. master (默认稳定主分支,受保护的)
    B. feature (新功能开发)
    C. orign_bug_fix (开源项目的bug_fix)
    大致就是这个意思,除非开源者有很大改动(大版本的变化),那么就会对原有的代码进行修改,如1.2.2 -> 2.0.0
    这个时候你就可以提交你对已有代码的修改了

    2019-07-17 18:48:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用RxSwift写易维护易读的愉悦代码 立即下载
《前端智能化实践》——逻辑代码生成 立即下载
不止代码 立即下载