读了《重构:改善既有代码的设计》这本书,说实话,一开始我没太当回事。毕竟作为一名.NET后端开发,天天都在跟代码打交道,觉得“重构”不就是整理一下代码,改改变量名,分拆一下方法嘛,谁还不会呢?但看完马丁·福勒的这本书,我才发现自己以前对重构的理解太肤浅了。
以前我们项目里最头疼的就是接到维护老模块的任务。尤其是那些祖传代码,一个方法动辄几百行,各种if-else嵌套,参数传来传去,看得人头大。想改个需求,就像是在一堆乱麻里找线头,生怕一动就引出新的bug。那个时候,我们管这叫“屎山”,唯一的想法就是尽量别去碰它。
这本书给我最大的启发就是,它把重构从一个模糊的概念,变成了一套有章可循的、可以日常化的工作方法。它不像一些理论书那样光讲大道理,而是给出了非常多具体的“坏味道”和对应的重构手法。比如“神秘命名”、“过长函数”、“重复代码”这些,几乎在我们的代码库里天天都能见到。书里教的“提炼函数”、“内联变量”、“以查询取代临时变量”这些招数,特别实在。
我现在的工作习惯跟以前有点不一样了。比如在实现一个新功能之前,我会先看看现有的相关代码是不是结构清晰。如果有点乱,我会先花一点点时间做个小重构,比如把一个大方法里的几行逻辑抽成一个有明确名字的小函数。就这么一个小动作,再接着写新代码时,思路会清晰很多,因为上下文变得更易读了。
还有一点对我影响很深,就是“测试是重构的安全网”。我们用的是.NET技术栈,书里虽然是其他语言的例子,但道理完全相通。我现在非常依赖单元测试。每次进行一个稍微有点风险的重构前,我都会确保相关的测试用例是齐全且通过的。这样我改动起来心里特别有底,就像有个安全绳。如果测试挂了,我马上就知道自己改错了,而不是等到集成测试甚至上线后才暴露问题。
当然,在现实工作中,不可能像书里理想情况那样有无限的时间去重构。我的体会是,要把重构变成一种习惯,融入到开发的每一个小步骤里。修一个bug的时候,顺手把那个让人困惑的变量名改了;加一个新功能时,把那段重复的逻辑抽出来。这种“童子功”式的持续小改,远比攒到代码已经烂得无法下手时,再申请一个大块的“重构时间”要可行和有效得多。
总的来说,这本书没有教我什么高深的.NET框架或者设计模式,但它教给了我一个更宝贵的东西:一种对待代码的态度和一份能长期保持代码健康的“养生手册”。它让我明白,优秀的代码不是一开始就设计出来的,而是在不断地、小步地修改和打磨中演化出来的。现在再看我们项目里的那些“老大难”模块,我不再只是感到畏惧,而是会觉得:“这里有个机会,可以试着用书里的方法一点点把它理顺。”这种感觉,比以前好多了。