Extract Method 提炼函数

一、用法

  1. 你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。

Extract Method 提炼函数_第1张图片

二、动机

  1. 当看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就应该将这段代码放进一个独立函数中。
  2. 首先,如果每个函数的粒度都很小,那么函数被复用的机会就更大;其次,这回使高层函数读起来就像一系列注释;再次,如果函数都是细粒度,那么函数的覆写也会更容易些。

三、做法

  1. 创建一个新函数,根据这个函数的意图来对它命名(以它“做什么”来命名,而不是以它“怎样做”命名)。
    =>即使你想要提炼的代码非常简单,例如只是一条消息或一个函数调用,只要新函数的名称能够以更好方式昭示代码意图,你也应该提炼它,单如果你想不到一个更有意义的名称,就别动。

  2. 将提炼出的代码从源函数复制到新建的目标函数中。

  3. 仔细检查提炼出的代码,看看是否引用了“作用域限于源函数”的变量(包含局部变量和源函数参数)。
  4. 检查被提炼代码段,看看是否有任何局部变量的值被它改变。如果一个临时变量值被修改了,看看是否可以将被提炼代码处理为一个查询,并将结果赋值给相关变量。如果很难这样做,或如果被修改的变量不止一个,你就不能仅仅将这段代码原封不动提炼出来。你可能先使用Split Temoporary Variable,然后再尝试提炼。也可以使用Replace Temp with query将临时变量消灭掉。
  5. 将被提炼代码中需要读取的局部变量,当做参数传给目标函数。
  6. 处理完所有局部变量之后,进行编译。
  7. 在源函数中,将被提炼代码段替换为对目标函数的调用。
    =>如果你讲任何临时变量移到目标函数中,请检查它们原来的声明式是否在被提炼代码段的外围。如果是,现在你可以删除这些声明式了。
  8. 编译,测试。

你可能感兴趣的:(设计模式)