代码不仅仅是写给机器运行的,也是写给人看的。
不要仅仅是为了设计纯粹性而重构
What’s refactoring ?
重构是什么?
名词形式:对软件内部结构的一种修改,在不修改软件外观行为的条件下,使之更易于理解和修改。
动词形式:在不改变软件外观行为的条件下,通过运用一系列的重构技术重新组织软件的结构。
强调:
- 重构的目的是要让软件编的更加容易理解和修改。
- 重构不会改变软件的外观行为。
why should you refactor ?
为什么重构?
- 重构可以改进软件的设计
- 消除冗余代码
- 重构让软件变得易于理解
- 重构可以帮助你发现bug
- 重构可以有助于更快地编程
- 改善设计
- 改善可读性
- 减少bug
以上三点保障了开发速度
when should you refactor ?
什么时候需要重构?
- 事不过三
- 在添加功能时重构
- 有助于理解即将修改的代码
- 提升设计,使之便于添加功能
- 在需要修复bug时重构
- 在代码复审时重构
- 代码复审发挥到极限就是极限编程实践中的结对编程。从效果上来讲,就是在开发流程中植入持续不断的代码复审和重构。
- 为了更好地理解而重构
why refactoring works ?
为什么重构能起作用?
让人难以应付的程序特点:
* 难读的程序也就难以修改
* 有冗余逻辑的程序难以修改
* 在添加新功能时需要修改现有代码的程序很难修改
* 有复杂条件逻辑的程序很难修改
重构可以简单地表达条件逻辑,为程序添加价值,提供更多品质,以保证持续高效地进行开发。
抽象和重构
抽象的价值:
- 共享逻辑
- 分开解释意图和实现
- 隔离变化
- 编码条件逻辑
重构和性能
常见的三种快速软件的方法
- 时间预算法
- 严格控制每个组件分配资源预算——时间和执行轨迹
- 定期关注法
- 随时保持性能高效
- 利用90%的统计结果
* 首先在分析器下运行程序,找到程序里性能热点的位置。然后专注于这些热点进行性能优化。
代码里的坏味道
- 重复代码
- 方法过长
- 激进方法:需要注释的时候,写一个方法代替注释
- 类太大
- 参数列表太长
- 发散型变化
- 霰弹型修改
- 特性依赖
- 数据泥巴
- case语句
- 用多态替换
- 平行继承体系
- 冗赘类
- 纯臆测的泛化
- 临时字段
- 消息链
- 中间人
- 过分亲密
- 异曲同工的类
- 不完善的类库
- 数据类
- 被拒绝的遗赠
- 注释
- 狂热的元编程
- 脱节的API