扁鹊一日去见王,两者展开了一段对话。
王:小扁呀,我听说你两个哥哥均是行医之人,你们哥仨谁的医术最高哇?
扁:禀大王,我认为大哥医术最高,而百姓认为我的医术最高。
王:这……确是为何?
扁:这么说吧,大王。大哥能发现病症于人未觉,饮食稍加注意,便可无事,病人不知他是在治病,所以没名气;二哥能发现病症于初期,开副药方即可痊愈,百姓以为他只能治小病,所以名气小;而我多料理重病症,开刀放血,病入膏肓之人康复后便尊我神医,他们哪里知道,我大哥发人之未觉,让人少受痛楚,才是真正的神医。
如果代码是病人,程序员是医生,我们是扁鹊三兄弟中的谁呢?
Martin Fowler第一次参访项目,提出类结构行为的调整,项目经理由于面临进度压力,推迟了调整工作,他同样拒绝了作者对内部核心的整理工作,因为重构并不能引入任何新功能,只是让代码好看而已,但6个月后项目失败。
什么是重构?
所谓重构是这样的一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种有纪律的、经过训练的、有条不紊的程序整理方法,可以将整个过程中不小心引入错误的机率降到最低。本质上说,重构就是在代码写好之后改进它的设计。
重构跟设计同样重要,哪怕面对糟糕的设计
代码之前的设计的重要性不言而喻,先做好设计再编码是个好习惯,但仍然避免不了代码质量的沉沦,尤其是在代码量不断增加,参与项目的人员变换,一阵刀砍斧凿,面目可能已全非,代码慢慢腐烂,临来的世界末日,工程大厦摇摇欲坠。
通过重构,你可以找出改变的平衡点,你会发现所谓设计不再是一切动作的前提,而是在整个开发过程中逐渐浮现出来。在系统构筑过程中,你可以学习如何强化设计,其间带来的互动可以让一个程序在开发过程中持续保有良好的设计。