代码重构4。

重复的代码

过长的方法

过大的类

过长的参数列

相同的参数列,总是在一起的参数

发散式变化:一个类会因为各种新需求而变化太大

散弹式修改:一个变化导致多个类都会变化

依恋情节:一个方法引用了很多个类,那这个方法到底该放在哪个类

用多态代替switch

删除冗余类

消息链:一个对象请求另一个对象,后者又请求另一个。。。

封装和过度封装:一个方法一个功能,一个方法里全是调用别的封装方法 不干实事

一.重新组织函数

  1. 提炼方法:

好处:每个方法细粒度很小,让方法被复用的可能性增大,使高层方法看起来想 一行一行的注释,细粒度小的方法重写容易,只要提炼可以加强 方法的清晰度,就要提炼

做法: 设置函数名是为了让人更好的理解,重构的目的,剩下的做法原函数的临时变量、自己的临时变量是为了 让重构后 的功能不发生改变

2.内联函数

好处:

  • 如果一个函数的内容和函数名一样清晰,就应该去掉这个函数,不必要的抽样方法让人不舒服;
  • 过多的间接方法一层调一层,不是所有的间接层都有价值,就可以将无用的去掉;
  • 在使用 以函数对象取代函数时,可以先使用内联,把过多的小函数 变成大函数,再新建函数对象

3.内联临时变量

唯一单独使用临时变量的情况:这个临时变量被赋予某个调用函数的返回值,就可以让它留在那

如果这个临时变量妨碍了其他重构,就去掉

4.用查询取代临时变量

好处:临时变量是暂时的,只能在所属函数内使用,如果想让类中所有函数都能获得此变量,就改成一个查询


以下都是例子:

5.引入解释性变量

跟取消临时变量正好相反,将复杂表达式或其中一部分放进一个临时变量,以此变量名来解释 用途。

好处:帮助人理解

尽量使用提炼方法,如果临时变量使提炼方法困难,再用解释性变量


6.分解临时变量



7.以函数对象取代函数

好处:提炼小型函数是最常用的方法,但如果一个方法里 临时变量非常多,会给提炼函数造成很大的困难,无法拆解时,就使用函数对象






8.替换算法

好处:重构可以将复杂的函数切成一个个小的函数,但有时候需要删除整个算法,代之以较简单的算法。


二.在对象之间搬移特性


1.搬移函数

好处:一个类和另一个类有太多合作而高度耦合,其中有的函数使用其他类的对象比自己所住对象都多,就要考虑搬移函数,让类更简单



2.搬移字段

某个字段,在所属类用的少,却在别的类用的多

3.提炼类

一个类承担一种责任,如果承担责任过多,考虑提炼

4.将类内联化

一个类的责任不明确,不负责任

5.隐藏委托关系

A类某个方法 通过B类 去调用C类,应该对外隐藏这种调用关系




6.移除中间人

和5正好相反, 不经过委托,显示出A通过调用B去调用C。

是否隐藏关系要看具体情况,如果person类中有大量的这种委托关系,需要写大量的委托函数,就没有必要了额

猜你喜欢

转载自blog.csdn.net/u014203449/article/details/80169858