首页 > 如何重构现有代码

如何重构现有代码

首先描述下问题场景

有开源项目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会有很多重复的代码

请各位前辈指教,有没有什么好的办法


首先,添加测试。
然后,重构。


第一步,先将大函数分解成小函数... ...将可以重复使用的小函数抽取出来.


推荐一本名著《重构 改善既有代码的设计》


每次对开源代码进行修改的时候,都拉去最新代码到自己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

这个时候你就可以提交你对已有代码的修改了

【热门文章】
【热门文章】