重构——改善既有代码的设计

 

《重构——改善既有代码的设计》

1.      重构:在不改变软件可观察行为的前提下改善其内部结构。重构保持代码易读、易修改的关键,在写好代码之后改进它的设计。

2.      改编代码的名称——值得。好的代码应该清楚的表达出自己的功能,变量名称是代码清晰的关键(可以用查找替换工具修改)

3.      尽量去除临时变量

4.      重构的目的:使软件更容易理解和修改,适当提升性能,和设计互补(重构可以带来更多的简单设计,又不失灵活性。降低设计过程的难度,减轻了设计的压力)

5.      改进设计是一个重要的方向。提高代码质量的维度:改善设计、提升可读性、减少错误等。

6.      最常见的重构是添加新特性时。调试时重构是为了更好的可读性。代码走查也可以重构。

7.      坏味道:重复代码、过长的函数(越长越难理解、分解之)、过大的类、过长的参数列表、一个变多处变、过多的注释(说明代码写的不好)、

8.      重构的基本技巧:小步前进,频繁测试

9.      过长函数:把一段代码从长函数中提取出来放入一个单独的函数,让函数名来解释函数的用途。注释处、循环等都可以作为提炼点。最大的困难:处理局部变量,尽可能去掉临时变量。临时变量只读不修改的话作为参数传入函数。——》每个函数的粒度都很小,则每个函数复用的机会大。

10.  一个临时变量只简单赋值一次,则将赋值代码替换临时变量

11.  将复杂表达式的结果放入一个解释性临时变量、以明朝表明表达式用途

12.  某个临时变量赋值吵一次——》每次赋值,设定一个独立的对应的临时变量

13.  移除函数中对参数的赋值,以临时变量代之

14.  将函数本体替换为一个算法

15.  搬移函数:在函数最常引用的类中建立一个幼者类似行为的新函数——》将旧函数变成一个单纯的委托函数或旧函数完全移除

16.  提炼类:某个类做了2个类的事情——》将相关字段和函数提炼到新类

17.  将类内联化:一个类没做什么——》两个类合并

18.  Get/set间接访问变量好处:子类可以通过一个函数而改变获取数据的途径,直接访问好处:代码易读

19.  当一个数据提取后,和其他数据和行为一起时才有意义则封装进类

20.  以对象代替数组。数组中每个元素以对象的字段来表示。一个数组容纳了不同的对象,给用户带来麻烦

21.  简化表达式——从if……else中分别提炼函数(分解表达式)、合并返回值相同的表达式——》提炼成函数、合并重复代码(if……else中都有时)——》移植到表达式之外

22.  以多态取代表达式,每个表达式的分支放入一个子类内覆盖函数,将原函数声明为抽象函数

23.  简化函数调用——修改函数名——》解释函数用途;添加对象参数;移除不必要的参数;以一个对象取代多个参数;函数从未被其他类用到——》改为private;将构造函数改为工厂函数

24.  处理概括类关系:2个子类有同一字段——》移到超类;某函数在多个子类中有相同结果——》移到超类;

25.  某字段/函数只在某些子类中用——》移到子类;为2个类提炼新类,将共同的代码移到新类;子类和超类区别不大——》合并

26.  开发者不愿意重构原因:不知道如何重构;是一个额外的工作;有风险,可能破坏现有程序。

27.  重构是手段不是目的最大的障碍:没有工具支持

28.  小函数如同娇小可爱的人

29.  OO对象的全部要点是将数据和对数据的操作行为包装在一起

30.  代码走查:有助于在开发团队中传播知识;有助于让有经验的开发者将知识传播给欠缺经验的开发者,并帮助更多的人理解大型软件系统中更多的部分

31.  重写代码:代码基本不能工作

32.  重构代码:

(1)    改进软件设计:没有重构,程序设计会变质,再为短期目的或未完全理解整体设计前,就贸然修改代码,程序会失去自己的结构(代码结构的流失是累计的)

(2)    使软件更易理解:除了正确告诉计算机我要做什么外,还要告诉第23人看懂。重构帮助理解原本不太熟悉的代码

(3)    帮助找到BUG,写出更强健的代码

(4)    提高编程的速度(良好发的设计是快速开发的关键)

猜你喜欢

转载自aoyouzi.iteye.com/blog/1859654