保存成功
订阅成功
保存失败,请重试
提交成功

靠谱程序员必备技能——重构

敏捷教练,培训师。致力于传播快乐高效的编程理念。业余创立软件匠艺社区 CodingStyle.cn,组织超过30场技术活动。个人公众号:小波老西。
查看本场Chat

为什么要重构

你可能正在面对一个遗留系统,增加一个需求要改动好几个文件,定位 Bug 经常要花掉一整天时间,修复一个 Bug 可能又制造了 3 个新的 Bug。你也可能会为了软件设计和同事争得面红耳赤,讨论如何应对未来可能出现的需求变化。

为了开发一个新需求,你打开一份源代码,完全不知所云嘛,你吐槽着谁能写出如此不堪入目的代码,于是决定查看版本记录,把这个家伙找出来鄙视一下。然后你在提交历史里看到了自己的名字... 恭喜你,你进步了。如果你是一个积极进取的程序员,通常在几个月甚至几个星期之后就认不出自己写的代码。你总能发现更好的实现方式,让代码更加优雅。 随着增加新特性或需求变更,代码会变得越来越难以维护。敏捷软件开发的十二条原则中有一条是:我们始终拥抱需求变化,哪怕是在软件开发的后期。为了达到这种状态,我们就要在开发过程中持续地优化代码。

而重构这项技术,为我们提供了一种更可控的方式来优化代码。

重构是什么

重构,通常指的是「代码重构」,起源于 Smalltalk 圈子。

在日常工作中,我们把重构既作为名词又作为动词来使用,作为名词时,它的意思是:

对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

所以我们会说,「这里需要做一个重构」,「这个重构有点问题」等。

而在其它时候,我们也会说:「我们来重构一下这段代码吧」,「我正在重构一个遗留系统」,这时就是把重构当做动词在用,它的意思是:

互动评论
评论
Kin3 年前
大而全的练习重构的 Java Kata https://github.com/aikin/refactoring-kata
评论
大雨4 年前
前提是先有TDD吗
评论
Chou4 年前
最近就遇到了大型遗留系统的重构的问题,一个方法上千行,方法里面调用外部接口返回的数据结构很复杂,if ,for循环嵌套了很多层为了取最里面的数据,无从下手。
评论
赵阳4 年前
长方法首先需要测试保护,如果没有可以增加特征测试。接下来可以用一些方法,比如,用草稿重构来抽取方法尝试理解原始意图,或者应用Method Object把其转换成一个单独的类,等等
评论
查看更多