1.1 何谓重构
重构(名词):对软件内部结构的一种调整,目的是在不改变“软件可察行为”的前提下,提高其可理解性,降低修改成本。
重构(动词):使用一系列的重构准则,在不改变“软件可察行为”的前提下,调整其结构。
1、 重构的目的是使软件更容易被理解和修改。
2、 重构不会改变软件“可察行为”。
1.2 为何重构
1、 改进软件设计:经常性的重构能够使代码保持其本来的设计思路。并且,消除代码重复。
2、 是软件更容易被理解:把理解嵌入到代码中,而不是嵌入到大脑中。
3、 帮助你找到臭虫(BUG ): Kent Beck :我不是伟大的程序员,我只是一个有着一些优秀习惯的好程序员而已。
4、 帮助你提高编程速度:良好的软件设计是快速软件开发的根本。
1.3 何时重构
你不应该为重构而重构,你之所以重构,是因为你想做别的事情,而重构可以帮助你把那些事情做好。
三次法则:
“第一次做某件事时只管去做;第二次做类似的事会产生反感,当无论如何还是做了;第三次再做类似的事,你就该考虑重构。——事不过三,三则重构。”
重构时间
1、 添加功能时重构。1 )为了方便理解代码。 2 )为了更快的添加新功能。
2、 修补错误时重构:使代码足够清晰,以使一目了然便发现bug 。
3、 复审代码时一并重构。
为什么重构有用 ——Kent Beck 程序的两面价值:今天为你做什么和明天为你做什么。 希望程序:1 )容易阅读。 2 )所有逻辑都只在唯一地点指定。 3 )新的改动不为危机现有行为。 4 )尽可能简单表达条件逻辑。 这是个性质是我们能够保持高速开发,从而增加程序的价值。 |
1.4 怎么对经理说
1.5 重构的难题
1、 数据库
2、 修改接口:
3、 难以通过重构手段完成的设计改动
4、 何时不该重构:产品无法正常工作;项目没有时间,即将发布。
1.6 重构与设计
重构的一项特别任务:与设计互补。原因是,你可以不必把“预先设计”当作一个完美的、肯定可以100% 解决问题的银弹,而只要此解决方案足够合理就可以了。你可以在实施此解决方案的过程中,随着对问题的理解的深入,不断的通过重构来优化设计方案。
重构的出现使软件设计朝向简化前进了一大步。未出现重构之前,我们的设计方案经常要应对软件声明周期中各种各样的变更,要求我们的方案要足够的灵活,足够的强固。这样导致的结果是“过度设计”,而使设计方案过于复杂而难于理解和维护。更失败的情况是,我们发现很多灵活性都毫无必要。
重构的出现可以改变设计的思路:如果把一个简单的设计方案重构成一个灵活的设计方案非常简单,那我们就只需要实现简单的方案就可以了。
重构可以带来简单的设计,同时又不损失灵活性。至于灵活而复杂的设计,你多数情况下并不需要他。
这个地方,和敏捷开发的思路十分的相像。同样,敏捷开发的核心中也存在:自动化测试和重构,反对过度设计。
至于系统架构层次的重构,因为重构的成本相对较高,所以预先设计的程度要相对较深。
哪怕你完全了解你的系统,也请实际测量它的性能,不要臆测。臆测会让你学到一些东西,但十有八九都是错的。
1.7 重构与性能
重构虽然会使系统运行变慢,但是却使优化性能变得容易。
优化程序的方法:前期通过重构构造出设计良好的程序,后期优化阶段找出程序的瓶颈,并进行优化。