代码重构
在不改变软件外部行为的前提下,对齐内部结构进行改变,使之更容易理解。
目的:提升代码质量,易于维护 。
理由
- 内聚性差
- 接口层次不一致
- 数据成员public
- 成员函数使用过多的其他类特征(弱内聚)
- 某个类没什么用
- 耦合性过强
- 子程序冗长
- 子程序命名不恰当
- 参数列表过长
- 代码重复
- case语句需要做相同的修改
- 全局变量
- 超前设计
- 不准确
- 不完备
- 可能没有用处
- 复杂性
如何重构
数据级重构
- 常量代替常量值 e.g. #define PI 3.14
- 变量名表达更多信息
- 表达式内嵌化
- 引入中间变量
- 多个单一变量代替一个多用途变量
- 在局部用途中使用局部变量而不是参数
- 函数参数不做工作变量
语句级重构
用函数代替表达式
…
子程序重构
- 简单算法代替复杂算法
- 精确类型
类重构
…
接口重构
- 去除委托关系
- 封装
- 不修改删除setter
- 信息隐藏
- 合并相似的基类和派生类
系统级重构
- 为无法控制的数据创建索引
- 单项的类联系改为双向的类联系
安全的重构
- 重构步伐小一些
- 检查修改
- 增加测试用例
重构的策略
80/20 原则
- 增加子程序进行重构
- 添加类
- 修补缺陷
- 关注易出错的模块
- 关注高度复杂的模块
代码调整
对正确代码进行调整的实践,可以使代码运行更为高效。
- 策略性
- 技术性
策略性的代码调整
- 程序需求
- 程序设计类和子程序的的设计
- 同操作系统的交互
- …
Pareto法则
少量代码对性能影响很大。