1.神秘命令(Mysterious Name)?
2. 重复代码(Duplicated Code)?
3. 过长函数(Long Function)?
活的最长,最好的程序,其中的函数都较短。
函数越长,就越难理解
但其实小函数也会给代码的阅读者带来一些负担,因为要经常切换上下文,才能看明白函数在做什么。若能给函数起一个好名字,阅读代码的人就可以通过名字了解函数的作用,根本不用去看函数的实现。
3.1 如何提炼函数的参数和临时变量?
3.2 如何确定提炼某个文件下某一段的代码呢?
一个好技巧:寻找注释
遇到条件表达式和循环
4. 全局数据(Global Data)?
5. 可变数据(Mutable Data)?
6. 发散式变化(Divergent Change)?
7. 霰弹式修改(Shotgun Surgery)?
霰弹式的修改类似于发散式变化,但却恰恰相反。
7.1 何为霰弹式修改?
7.2 如何对霰弹式的程序进行修改?
8. 依恋情结(Feature Envy)?
依恋情结的情况:比如一个函数跟另一个模块中的函数或数据交流很频繁。
8.1 何为模块化?
8.2 有时候一个函数中往往会用到几个模块中的功能,那如何处理这种依恋情结呢?
9. 数据泥团(Data Clumps)?
数据项像小孩子一样,喜欢成群结队待在一起。
9.1 如何评判众多数据是否有价值?
10. 过长的消息链(Message Chains)?
何为过长的消息链?
如何针对过长的消息连进行重构?
11. 注释(Comments)?
1. 自测试代码的价值?
能够确保所有测试都完全自动化,让他们检查自己的测试结果。
当完成一个功能后,就开始编写测试代码可以更好的提高开发效率。
一套测试就是一个强大的bug侦测器,能够大大缩减查找bug所需的时间。
将测试代码的习惯提炼成一个技艺?
测试驱动开发的短循环?
2. 本章所讲的内容?
1. 重构的记录格式?
每个重构手法都有 5 个部分