何谓重构
重构就是一种”保持行为的转换“,或者如Martin Fowler定义的那样:重构时一种对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。
重构过程包括去除重复、简化复杂逻辑和澄清模糊的代码。重构时,需要对代码无情地针砭,以改进其设计。这种改进可能很小,小到只是改变一个变量名;也可能很大,大到合并两个类层次。
- 重构的动机:
- 使新代码的增加更加容易 :补齐设计欠账,这个迟早是要还的。
- 改善既有代码的设计:持续改善代码的设计,代码将越来越容易处理。
- 对代码理解更加透彻:代码本身不清晰,就说明存在坏味。通过重构消除,而不是用注释掩饰。
- 提高编程的趣味性:编程本身就是一件具有创造性、趣味性的事情,而重构将其放大。
- 可读性好的代码:读起来像自然语言,将重要的代码与分散注意力的代码分离开来。
傻瓜都能写出计算机可以理解的代码。唯有能写出人类容易理解的代码的,才是优秀的程序员。
——Martin Fowler
保持代码清晰就像保持房间整洁。一旦你的房间变得乱七八糟,就更难清理了。变得越乱,就越不想清理。直到某一天乱到你忍受不下去,不得不花费大量的时间和精力进行整理。要保持代码清晰,必须持续地去除代码,简化和澄清代码。决不能容忍代码中的脏乱,决不能把代码置于“焦油坑”的险境(《人月神话》)。
重构最好是持续而不是分阶段地进行。持续性的重构也更符合敏