重构的手法中,很大一部分是对函数进行整理,使之更恰当地包装代码。
问题来源:
过长函数。
这些过长的函数,往往包含太多信息,这些信息又被函数错综复杂的逻辑掩盖,不易鉴别。
解决方案:
使用Extract Method(提炼函数),把一段代码从原先函数中提取出来,封装成一个单独函数中。
困难:
处理局部变量。
做法:
1. 封装新函数:创造一个新函数,并根据函数的意图来对它命名。函数以“做什么”来命名,而不是“怎么做”。
2. 将提炼出的代码从源函数复制到新建的目标函数当中。
3. 仔细检查提炼出的代码,看看其中是否包含源函数的局部变量和参数。
4. 检查是否有“仅用于被提炼代码段”的临时变量。 若有,在目标函数中将它们声明为临时变量。
5. 检查被提炼代码段, 看看是否有任何局部变量的值被改变。
如果一个临时变量值被修改了,看看是否可以将被提炼代码段处理为一个查询,并将结果赋值给相关变量。
如果很难这样做,或如果被修改的变量不止一个,你就不能仅仅将这段代码原封动提炼出来。 你可能需要先使
用分离临时变量(Split Tempory Variable),然后再尝试提炼;也可以使用以查询取代变量(Replace Temp
with Query)将临时变量消灭掉。
6. 将被提炼代码段中需要读取的局部变量,当作参数传给目标函数。
7. 处理完所有局部变量之后,进行变异
8. 在源函数中,将被提炼代码段替换为对目标函数的调用。
9. 再次编译,测试。