一、何谓重构(What)
视上下文的不同,重构有两种定义:
重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
重构(动词):使用一系列重构的手法,在不改变软件可观察行为的前提下,调整其结构。
1、重构的目的是使软件更容易被理解和修改。
2、重构不会改变软件的可观察的行为——重构之后软件的功能一如以往。
在使用重构技术开发软件时,有两种截然不同的行为:添加新代码,以及重构。这便是“两顶帽子”。
添加新功能时,你不应该修改既有代码,只管添加新功能。通过测试,你可以衡量自己的工作进度。
重构时你就不能再添加新功能,只管改进程序结构,只在绝对必要时才修改测试。
二、为何重构(Why)
1、重构改进软件设计
2、重构使软件更容易理解
3、重构帮助找到bug
4、重构提高编程速度
三、何时重构(When)
这里作者提出:几乎任何情况下,都反对专门拨出时间进行重构。重构应该随时随地进行。你不应该为重构而重构,之所以重构,是因为你想做别的什么事,而重构可以帮你把那些事做好。
三次法则:第一次做某事只管去做;第二次做类似的事,虽然会反感但也可勉强去做;第三次再做类似的事,你就该重构了。
事不过三,三则重构。
1、添加功能时重构
最常见的时机就是给软件添加新特性的时候,可以帮助我理解需要修改的代码。
如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。
2、修补错误时重构
调试过程中运用重构,为了让代码更具可读性,可以加深自己的理解,找出bug。
3、复审代码时重构
重构可以帮助我复审别人的代码,还可以帮助代码复审工作得到更具体的结果。
何时不该重构
1、重新编写所有代码的时候
有时候既有代码太混乱,重构不如重写来的简单。
重写有一个清楚的讯号:现有代码根本能不正常运行,代码里面满是错误,无法稳定运行。
2、项目已近最后期限
重构的确能提高生产力。如果最后没有足够时间,就表示你其实早该重构。
任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员。