当遇到一下情况时应该开始重构代码:
1.遇到重复代码时:如果遇到一个以上有相同程序结构,需要考虑将他们合并。比如:
(1)同一个类的两个函数含有相同的表达式(要提炼重复代码)
(2)两个互为兄弟的子类内含有相同的表达式(提炼相同代码形成方法放入超类中)
(3)遇到两个互不相关的类出现重复代码,考虑将重复代码提炼到一个独立类中,原来的两个类分别调用第三个类的方法(最好自行确定该函数应该放在哪个位置)
2.函数过长
整理函数的技巧:
(1)取出多余参数和临时变量;保证一个函数只用于完成一件事;判断提炼成方法的技巧是寻找注释,它通常能指出代码用途和实现手法之间的语义距离,如果代码前方有一行注释,就可以考虑将这段代码替换成函数;就算是只有一行函数,如果它需要以注释来说明,也值得将它提炼到独立函数中。
(2)条件表达式和循环常常也是提炼的信号
3.过大的类
4.函数含有过长参数列
发散式变化
主要判别特征是需求变动一次时需要同时调整多个类的代码。(针对某一外界变化的所有相应修改都只应该发生在单个类中)
5.霰弹式修改
主要判断依据是遇到某种变化时,必须在许多不同的类中做许多小修改。(解决方法是将所有需要修改的代码放进同一个类,如果眼下没有合适的类可以安置这些代码,就创建一个)
6依恋情结
判断依据:某函数对某个类的兴趣高于对自己所处类的兴趣。(解法:把这个函数移至另一个地方,如果有些函数依恋多个类的数据,就将依恋部分提取出来并移到相应类中)
7.数据泥团
8.基本类型偏执
9.switch Statements(switch惊悚现身)
10.平行继承体系
11.冗赘类
12.夸夸其谈未来性
13.狎昵关系
判断依据:两个类过度的数据交互和依赖(需要划清界限)
14.过多的注释