代码重构大纲
重构目的
重构的目的是使软件更容易被理解和修改
与之形成对比的是性能优化 和重构一样 性能优化通常不会改变组件的行为(除了执行速度) 只会改变其内部结构 但是两者出发点不同 性能优化往往使代码较难理解 但为了得到所需的性能你不得不那么做
重构不会改变软件可观察的行为 重构之后软件功能一如以往
为何重构
重构改进软件设计
重构使软件更容易理解
重构帮助找到bug
重构提高编程速度
何时重构
三次法则 事不过三 三则重构
添加功能时重构
修补错误时重构
复审代码时重构
有以下情况进行重构
重复代码
过长函数
过大的类
过长参数列
发散式变化
霰弹式修改
依恋情结
数据泥团
基本类型偏执
switch惊悚现身
平行继承体系
冗赘类
夸夸其谈未来性
令人迷惑的暂时字段
过度耦合的消息链
中间人
狎昵关系
异曲同工的类
不完美的库类
纯稚的数据类
被拒绝的遗赠
过多的注释
当你感觉需要撰写注释时 请先尝试重构 试着让所有注释都变得多余
构筑测试
如果你想进行重构 首要前提就是拥有一个可靠的测试环境
确保所有测试都完全自动化 让它们检查自己的测试结果
一套测试就是一个强大的bug侦测器 能够大大缩减查找bug所需要的时间
频繁地运行测试 每次编译请把测试也考虑进去 每天至少执行每个测试一次
每当你收到bug报告 请先写一个单元测试来暴露bug
编写未臻完善的测试并实际运行 好过对完美测试的无尽等待
考虑可能出错的边界条件 把测试火力集中在那儿
当事情被认为应该会出错时 别忘了检查是否抛出了预期的异常
不要因为测试无法捕捉所有bug就不写测试 因为测试的确可以捕捉到大多数bug