先说说什么代码需要重构:
1.Duplicated Code
2.Long Method
3.Large Class
4.Long Parameter List
5.Divergent Change (牵一发动全身)
6.Shotgun Surgery(霰弹式修改)
7.Feature Envy(和其他类有千丝万缕的关系)
8.Data Clumps (一个类中包含过多数据类型)
9.Primitive Obsession (基本数据类型的偏爱。少使用基本数据类型,多用类。)
10.Switch Statements(看见Switch是不是就想起了某丧尸游戏的小BOS,害不害怕。所有你写的所有代码请不要用switch判断语句。)
11.Parallel Inheritance Hierachies(意思是不要瞎继承。请使用单继承关系)
12.Lazy Class (冗余类)
13.Speculative Generality(不要觉得未来会用到这些东西而写代码)
14.Temporary Field (注意全局变量和局部变量定义)
15.Message Chains(过度耦合的消息链,请尽量少的调用其他类的东西。)
16.Middle Man (使用代理也不要贪杯哟)
16.Inappropriate Intimacy (两个类的关系不要太亲密)
17.Akternative Classes with Different Interface(差不多相同功能的类有不同的接口)
18.Incomplete Library Class (不完整的库)
19.Data Class(纯数据的类,请把对这个类中的数据操作的函数放到类中。)
20.Refused Bequest(被拒绝的馈赠,子类应该继承超类所有东西。)
21.Comments(过多的注释)
重构方法:
1. Extract Method(方法中提取方法)
2.Inline Method (请使用内联函数)
3.Inline Temp(使用内联变量)
4.Replace Temp with Query(以查询取代零时变量:用方法表示变量)
5.Introduce Exolaining Variable (引入解释性的变量)
6. Split Temporary Variable (分解零时变量,即零时变量不要赋给不同的含义。)
7.Remove Assignmengt to Parameters(不要对传入变量进行操作。可给传入赋值零时变量操作)
8.Replace Method with Method Object (若函数过于大,就把函数变成函数对象)
10.Substitute Algorithm(替换算法)
11.Move Method(移动函数到其他类)
12.Move Field
13.Extract Class(提炼类)
14.Inline Class (合并类)
15.Hide Delegate(隐藏委托关系)
16.Remove Middle Man(移除代理)
17.Introduce Foreign Method (引入外加函数)
18.Self Encapsulate Field(自封装字段,get set...)
19.Repalce Data Value with Object(对象取代数据值)
20.Duplicate Observerd Data(复制被监控的数据)
21.Change Unidirectional Association to Bidirectional (将双向关联改成单项关联)
22.以上相反。
23.Replace Magic Number with Symbolic Constant (以数字常量取代数字)