背景 :函数上千行代码,类巨大,高耦合。业务发展到一定阶段,原来的程序设计不能满足业务需求,或者经过多遍更改后,存在大量冗余的逻辑代码;新的架构设计,进行业务拆分。
重构是在不改变项目现有的业务逻辑或者代码逻辑的基础上对程序进一步提炼或者扩展,使其结构化,代码规范化,弱耦合。非常重要的一点。
糟糕的类型:
1)重复代码;
2)过长的函数(一般超过200行),需要积极的拆分子函数;
3)过大的类,类越大,职责就越多,导致类产生的实例也会越多。同时,职责越多的类,其修改后影响也就越大。
4)过长的参数列表,如果参数过多,或者变化太过频繁,考虑用对象替换参数列表;
5)发散式变化,如果类经常在不同的方向上发生变化,考虑将类拆分。
6)散弹式修改,与发散式变化刚好相反,如果遇到某种变化要修改很多地方,可以考虑将变化的抽到同一个类中。
7)依恋情结,就是如果某个函数功能需要调用另一个类中的大半变化,可以考虑将这个函数抽到变化的类中。
8)数据泥团,数据项总是喜欢成群结队的聚在一起,可以考虑对数据项抽象对象。
9)平行继承体系,就是为某个类增加一个子类的时候,也必须为另一个类增加子类,这时候可以考虑让一个继承体系引用另一个继承体系。
10)冗赘类
11)夸夸其谈的未来性,就是设计的时候过多考虑未来,导致现有的类设计复杂
12)过度耦合的消息链。
I. 小步前进,频繁测试
1)重新提炼函数,是最常见的重构手法;
2)内联函数或者临时变量,就是收缩函数或者临时变量。比如内联临时变量的时候,直接用返回函数的表达式代替临时变量。
3)用函数对象取代函数,就是将函数放到单独的对象中,这样局部变量就变成里对象字段,有助于拆分函数。
4)替换算法,用另一个更清晰的算法替换到现有算法。
II. 在对象之间搬移特性
1)搬移函数,就是将现有函数的实现逻辑搬移到一个新的常引用的类中,在本类中建立一个委托函数,调用新类中的新函数。
2)搬移字段,
3)提炼类,建一个新类,将相关的字段和函数从旧类中搬移;
4)移除中间人
5)引入外加函数,就是在提供类中创建一个函数,但是并不改变提供类。
6)以对象取代数据值,就是将数据项封装为对象。
7)将值引用替换为对象引用,或者将对象引用替换为值引用。
8)条件表达式分解,即条件变为函数。
9)用return表示条件结束,即使用卫语句,要么结束,要么抛出异常。
10)引入Null对象,引入断言
原文:https://blog.csdn.net/chenwiehuang/article/details/79951625
来源:https://www.cnblogs.com/facker1/p/10608909.html