cover

谈谈「重构」

sorcererxw

最近看完了《重构:改善既有代码的设计》,书中介绍很多重构的技术,但是因为之前学习过《Effective Java》和设计模式,加上平时开发的比较有“洁癖“,花了不少在思考代码设计,所以对于书中介绍的一些技术,并没有感到眼前一亮,只不过是第一次看到有人把这些技术一条一条地书面整理出来。

相比具体地重构的技术,对我有更大的触动的是作者对于重构的理念。

重构就好像运动,吃适当的食物。

重构是一个大工程,但应该将这个工程穿插在日常开发当中。

就和人一样,经常运动和合理膳食,虽然会在平时花去一定的时间,但是健康的生活方式会让人在生活工作中有更高的效率,长远来看,会给人带来健康的体质;相反的,如果平时不注意健康,不但会降低平时的工作生活的效率,还会埋下的疾病隐患。

如果我们平时主要及时重构代码,保证合理的代码设计,不但会让我们平时开发的效率得到提升,还能保证未来系统的强健;相反的,不好好维护代码设计,不但降低开发效率,还会拖欠下技术债。

两顶帽子

开发过程中可以分为两顶个方面,功能开发和代码重构,前者是面向计算机,后者是面向开发人员的。

需要时时刻刻记住,这两个任务不能同时进行,就像不能同时戴上两顶帽子一样:

  • 如果你在完成某一个功能的开发,就不要写到一半去重构一部分代码,因为这个过程中你的目标是实现功能,而不是优化代码设计。
  • 如果你在进行重构,看到 bug 不要急着去修,记下来,回头再说,专注于代码的重构,因为重构的本质是保证代码功能不变的情况下,优化代码设计,所以即使是更正了 bug,也会导致最后的功能(输入输出)发生变化。

这一点我感受非常深刻,因为平时开发的时候,总是因为忽然发现某一处代码设计可以更加优化,或者重构时发现功能需要更新,把两个任务杂糅在一起进行操作,导致最后重构的代码可能无法兼容其他代码,反而使代码成为一团乱麻。

我想大概就是因为开发功能的时候,目光使聚焦一个小点,而重构的时候,需要把目光放眼整个模块的设计,人不可能同时专注于两个点。