[转]一些重构技术 Martin Fowler

提取方法(Extract Method)

当有一个代码片段单独拿出来也具有意义时,可以应用“提取方法”。这段代码被提取出来并成为一个方法,方法的名称清楚地解释了该方法的目的。简而言之,命名良好的方法可以让代码变得更清晰。一个命名良好的方法可以减少对注释的需要。有时,甚至能发现一些属于某个方法的重复代码。

用查询替代临时变量(Replace Temp with Query)

当发现使用了一个临时变量来保存一个表达式的值时,可以应用“用查询替代临时变量”。通过提取表达式并放入一个方法,然后用方法调用替代所有对临时变量的引用,程序的意义会更清楚,而且可以在其他地方重用该方法。

移动方法(Move Method)

如果发现某个方法在另一个类中被频繁调用,超过了在定义它的类中被调用的频繁程度,就可以考虑使用“移动方法”将该方法移到另一个类中去。移动原来的定义,并从原来的类调用新的方法。

提取类(Extract Class)

如果发现一个类完成了实际上应该由两个类来完成的工作,请使用“提取类”。可以创建一个新的类,并将相关的属性与方法从原来的类移到新类中。

分解条件子句(Decompose Conditional)

一种改进复杂条件子句的方法是把then和else部分的代码提取出来,放到命名良好的方法中去。这降低了复杂度,使语句更有意义且便于阅读,也常常可以得到可以重用的方法。

方法重命名(Rename Method)

方法重命名是最简单的重构技术之一,但它可能导致代码更容易理解。如果方法名(或者变量名)不能说明目的,那么它应该改用一个更有意义的名字。

方法合并(Pull Up Method)

如果发现不同子类中的方法有等价的结果,可以应用“方法合并”将它们移到超类中去。消除这种重复行为使代码更易于维护和理解。

提取子类(Extract Subclass)

如果一个类的某些方法只被该类的部分实例所使用,这些实例应该有它们自己的子类。“提取子类”用于提取这些特征并形成一个新的子类。

原文地址:https://www.cnblogs.com/stonefeng/p/2660172.html