记住:尽信书不如无书
初章: UML 很重要,先用UML来画出类图,然后再设置,是一个很好的习惯。老外还喜欢用时序图,好正规!
如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达成目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。
重构的第一步 可靠的测试(非常重要)
每当我要进行重构的时候,第一个步骤永远相同:我得为即将修改的代码建立一组可靠的测试环境。这些测试是必要的,因为尽管遵循重构手法可以使我避免绝大多数引入bug的情形,但我毕竟是人,毕竟有可能犯错,所以我需要可靠的测试。
重构的第二步 分解大的函数
- switch语句变为独立函数
- 修改函数名字和变量名字
- 下一个步骤是找出程序中对于旧函数的所有引用点,并修改它们,让它们改用新函数
- 做完这些修改之后下一 件事就是去掉旧函数。编译器会告诉我是否我漏掉了什么。然后我进行测试,看看有没有破坏什么东西。有时候我会保留旧函数,让它调用新函数。如果旧函数是一.个public函数,而我又不想修改其他类的接口,这便是一种有用的手法。
- 尽量去掉临时变量?(不大同意)
- 重构要小步前进
重构原则
何时重构
三次法则
添加功能时重构
修改错误时重构
复审代码时重构
代码的坏味道
- 重复代码
- 过长函数
- 过大的类
- 过长参数列
- 发散式变化
- 散弹式修改
- switch语句
第四章 构筑测试体系
第五章 重构列表
第六章 重新组织函数
第七章 在对象之间搬移特性
第八章 重新组织数据
第九章 简化条件表达式
第十章 简化函数调用
第十一章 处理概括关系
第十二章 大型重构