重构技巧
1、提炼方法
多个方法代码重复、方法中代码过长或者方法中的语句不在一个抽象层级。方法是代码复用的最小粒度,方法过长不利于复用,可读性低,提炼方法往往是重构工作的第一步。
意图导向编程:把处理某件事的流程和具体做事的实现方式分开。把一个问题分解为一系列功能性步骤,并假定这些功能步骤已经实现。我们只需把把各个函数组织在一起即可解决这一问题。在组织好整个功能后,我们在分别实现各个方法函数
2、以函数对象取代函数
将函数放进一个单独对象中,如此一来局部变量就变成了对象内的字段。然后你可以在同一个对象中将这个大型函数分解为多个小型函数。
3、引入参数对象
方法参数比较多时,将参数封装为参数对象,移除对参数的赋值
4、将查询与修改分离
任何有返回值的方法,都不应该有副作用,不要在convert中调用写操作,避免副作用。常见的例外:将查询结果缓存到本地。
5、移除不必要临时变量
临时变量仅使用一次或者取值逻辑成本很低的情况下
6、引入解释性变量
将复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途
7、使用卫语句替代嵌套条件判断
把复杂的条件表达式拆分成多个条件表达式,减少嵌套。嵌套了好几层的if - then-else语句,转换为多个if语句
8、使用多态替代条件判断断
当存在这样一类条件表达式,它根据对象类型的不同选择不同的行为。可以将这种表达式的每个分支放进一个子类内的复写函数中,然后将原始函数声明为抽象函数。
当出现大量类型检查和判断时,if else(或switch)语句的体积会比较臃肿,这无疑降低了代码的可读性。 另外,if else(或switch)本身就是一个“变化点”,当需要扩展新的类型时,我们不得不追加if else(或switch)语句块,以及相应的逻辑,这无疑降低了程序的可扩展性,也违反了面向对象的开闭原则。