《重构:改善既有代码设计》第二版读后

2019-03-21  本文已影响0人  颍水书生

《重构》这本经典之作终于在时隔二十年之后,迎来了第二版。有幸拿到了异步社区的精简预览版(共125页),读完之后,感叹作者马丁·福勒(Martin Fowler)一方面是"重构"技术的倡导者,另一方面也是身体力行践行"重构"这么技艺的大师。

第二版有几个明显的变化:

1、书中的示例代码语言由Java换成了大家更为熟悉的JavaScript,可以让更多的读者能够轻松的阅读。

2、增加了一些颗粒度更小的重构手法,操作也更细腻。

这些变化的目的,是让这本书更容易理解。代码的重构与书一样,是为了让代码结构更清晰,更易读(主要是指人的读),也更容易扩展。用作者的话说就是:任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。

学习一门技术、一个手艺,我们要把握两点:概念、规则。

首先我们了解一下重构(refactoring)的定义:

在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减小整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它的设计。

作为一名程序员,内心深处都有一个理想(幻想):如果某一天,有一个需求描述清晰、逻辑严密、文档完善,即使修改需求也是经过反复验证过的;开发时架构设计非常优良,能很方便的扩展新的功能,而且没有任何(极少)bug….

当然,这仅仅是一个理想的状态,现实中谁也没碰到过(据能查到的公开资料来看,是这样的)。

现实世界,“VUCA” (易变、不确定、复杂、模糊)横行,需求的不明确比比皆是,刚开始设计良好的架构,慢慢的变得杂乱无章,在某个角落里,甚至是充满着腐臭(代码的坏味道)。

这个时候怎么办?大部分人/公司的选择是,反正已经这个样子了,也不是我造成的,能将就着用就先用着吧,等到有时间再重构吧。可是这一天总是等不来,也没有人去实施重构,甚至不出问题也不会去测试。直到某一天负责这个项目的负责人实在忍受不了,跟开发团队说我们重构这套系统吧,给一个月的时间。于是开发人员加班加点的开始"重构"这套系统,然而由于基本功的欠缺,做出修改的时候过于乐观,没有测试、没有认真考虑行为保持的修改过程,痛苦回忆又一遍遍重演。最后,这套系统不堪重负,开发团队选择了重写。。。

这一幕在国内的公司中经常上演,如果解决上述问题?《重构》这本书给出了答案。

它的核心思想就是:在代码写好之后改进它的设计。 哪怕手上有一个糟糕的设计, 甚至是一堆混乱的代码, 我们也可以借由重构将它加工成设计良好的代码。重构的每个步骤都很简单,甚至显 得有些过于简单:只需要把某个字段从一个类移到另一个类,把某些代码从一个函数 拉出来构成另一个函数,或是在继承体系中把某些代码推上推下就行了。但是,聚沙 成塔,这些小小的修改累积起来就可以根本改善设计质量。这和一般常见的“软件会慢慢腐烂”的观点恰恰相反。

甚至来说,大多数系统的设计,都是经历不断的迭代:设计-构筑-再设计,就像油画一样,反复的修改,才最后输出了成型的作品。

这本书篇幅不短(大概400多页),但是不要被吓到,作者在引言里也明确的说了,认真阅读完前四章,就可以选择性的开始动手重构代码,其他章节大可作为一个速查手册,遇到问题时再去查都来得及。

怎么能修改而又不造成破坏呢?第一是要测试先行,第二是识别代码的坏味道,第三要有靠谱的修改方法(保证每一步的修改后,程序仍能正常工作),是重构的基本功。

第一章,详细描述了一个小程序的重构过程:测试先行、修改命名、去除临时变量、提炼函数、内联函数、封装变量、拆分….

如果看过第一版的《重构》,会感觉很亲切,功能逻辑类似,优化了小程序的背景,让年轻的读者更容易理解;把使用的Java语言换成了Javascript;使用了更细腻的手法,颗粒度很小,比如:如果要重构一个函数,首先建立一个空中间函数,等重构完成再删除旧的函数。

第二章,重构的原则,什么是重构、为什么要重构、什么时间重构、重构的挑战、重构与性能、自动化重构...

使用重构技术开发软件时的两顶帽子:添加新功能和重构。添加新功能的时候,就只管添加新的功能,然后对新功能进行测试,让其正常运行。重构时就不要添加新的功能点了,专注于调节代码结构。

不要等到非重构不可的时候,才去重构,而是一旦嗅到了代码中有"坏味道",就要开始重构的工作,这样会使你的整个开发过程变得更为顺畅,重构及测试也花不了太多时间,也许就是10分钟、8分钟;尽量不要划出专门的时间做以小时为单位的重构,那样的重构也很难进行。

第三章,很著名的"代码的坏味道",可以作为践行重构过程中的一个行动指南(清单)

第四章,构筑测试体系

无论何时开始重构,第一个步骤永远是:确保即将修改的代码拥有一组可靠的测试。因此,构筑一套可靠的测试体系非常重要。

第五章以后就是这本书的核心—重构名录,书中给出了60多个可行的重构,每个重构都介绍了种经过验证的代码变换手法的动机和技术。

…...

以上

上一篇下一篇

猜你喜欢

热点阅读