重构的流程长啥样?
一些看过老马《重构2》一书的小伙伴可能很快就对书中列举了22种代码坏味道倒背如流,并对那60多种已经起好名字的重构手法在练习的时候能够驾轻就熟,而且细心点的你可能已经注意到了很多重构手法是互逆的,我相信你也很容易从书中取走这些叫做知识的东西。
拿到这些知识,你打算去行走江湖,不久就会发现江湖险恶,远不是在闭门练功那么简单。发现招式不灵,但时长因为步子迈大了,让自己陷入进退两难的境地。所以光记住大师总结的知识还远远不够,你能将这些知识轻松取走,但你取不走大师产出这些知识的经验和他们所踩过的坑,这些坑只有自己踩过之后才能有所体会。而重构真正的威力就恰好隐藏在这些不可跨越的过程经验中。
这些过程是什么?是为了提供测试安全网而辛辛苦苦写测试的过程(遗留系统补测试,新系统推荐TDD)。是原封不动,创建新的,再小步替换掉旧有的过程。是重构失败后安全撤回的过程,这三个过程是值得新人在起步的时候多去琢磨的。这就好比,当你第一次去学滑雪,你会先学什么?请你思考10秒钟再往下看......
如果你打算先学如何刹车(在雪坡上停住),那我要恭喜你,因为你跟我想得是一样。当然俞敏洪老师当年就是这么想的,他也这么做了。受俞老师启发,我学习滑雪的第一件事情是学了3种刹车方式,能够让我随时停下来,我就很有信心去学习一些高难度动作了:比如S型平行转弯。
如果你在学习重构的时候一开始就跟学滑雪一样,先学会了如何让自己安全前进,学会了如果让自己随时停下来,你已经掌握了重构80%的精髓了,剩下的就慢慢依图索骥吧,跟着大师慢慢打磨自己的本领吧。
如果你细心点还会发现,老马在描述重构手法的时候,就拿提炼函数来说,他在做法描述了非常小心翼翼的过程,基本上他都会先创建一个新的,然后逐步用新的替换掉旧的,然后要么成功,要么回滚。如果说重构有个什么样的流程,我觉得应该是这样子:
- 构建安全网
- 旧的不变,新的创建,一键替换,旧的再见(ThoughtWorks王健提出的16字心法)
- 提交或回滚
回到实际重构代码落地操作层面,可以是这样子:
- 编写测试
- 简单清理(可选)
- 识别味道
- 运用手法(记住那16字)
- 验证结果
对于这个流程,你觉得好用吗?