首页 > 代码库 > 重新组织函数--《重构》阅读笔记

重新组织函数--《重构》阅读笔记

1)寻找引用点时,最好使用工具,然后再人工review。在看到这个问题的时候,我估计应该是很久之前了。现在用IDE。这个要方便很多。

2)重新组织函数的方法和目标。

其实目标很简单。就是消灭长函数。

  常用方法

  Extract method

  Inline Method

  Replace Temp with Query

  Temporary Variable

  Replace Method with Method Object

  Remove Assignments to Parameters

  Substitude Algorithm

3)Extract Method

   1.这个方法看起来很简单。实际上也是很简单的。我觉得这里的技巧,或者说难度,还是在于对业务逻辑能够合理的拆分。

   2.看到这么一句话,如果说函数足够小。那么高层函数其实起来像是注释。

      这个让我想起了以前和同事就Extract method这个问题讨论。反对派的观点主要是集中在复用度上面。觉得有些方法,即使抽出来,很难复用。但是这句话,很好的反驳了他们。Extract method可以是让以“注释”的方式,让代码更加可读。

4)Remove Assignment to Parameters.

   1.这个方法还是挺简单的。就是把局部方法压入Extract Method。唯一比较麻烦的是返回值需要有多个值的时候,可以用Replace Temp with Query 和 Replace method with Method Object来解决。

5)Inline Method

   1.书中提到了两个原因要用到这种重构方式。

    第一种,函数太简单,个人觉得用处不大。因为函数一个很重要的目的是封装变化。这么做就和这个目的背道而驰了。

    第二种,就是为了重新重构做准备。需要回复到比较原始的状态。就好像倚天屠龙记中,俞三侠要用黑玉断续膏重新接骨,要把老伤打断,一个道理。

6)Inline Temp

   Inline Temp多半是作为Replace Temp with Query的一部分来使用的。

   我觉得这个重构手法单独的用处不大。或者说只有极度喜欢减少代码行数的人喜欢使用。我不是其中的一员。我不觉得代码行数越少,就代码可读性就越高。但是现实中,你总是会碰到一些人会问。可以写成一行的,为什么要写成两行?

    我比较赞同书中的说法,除非影响到以后其他的重构方法,否则还是不要做得好。

7)Replace Temp with Query(以查询取代临时变量)

    1.用方法来减少临时变量,变量变成返回值。

    2.Splite Temporary Variable

       Separate Query From Modifier

    3.只被复制一次的临时变量。超过一次用Splite Temporary Variable

    4.第一次看到这个名字的时候,我还是比较排斥,或者说不喜欢这种重构方式的。因为觉得这个增加运算的次数。很多时候。用个变量存储方法返回值,是减少运算次数。但是看了例子之后,发现其实他的核心是解决局部变量阻挡Extract Method。就好像是依赖注入一样。当一个值是被“注入话,移动它也就方便很多了。

8) Introduce Explaining Variable(引入解释性变量)

将复杂表达式(或其中一部分)的结果放进一个临时变量,以变量名称来解释表达式的用途。

觉得这个方法和Extract Method区别不是很大。

9)split Temporary Variable(分解临时变量)

你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。那么针对每次赋值,创造一个独立,对应的临时变量。

1,看了那么多,觉得核心思想是对临时变量进行控制,除了一些列外(循环变量和结果收集变量),尽量越少越好,即使有,也是一次赋值。

2.  这个其实是一个中间方法,主要还是减少局部变量在重构时的障碍。

10)Remove Assignments to parameters(移除对参数的赋值)

  就算没有重构的原因,这个也是不该发生的。

11)Replace Method with Method Project(以函数对象取代函数)

    将这个函数放进一个单独的对象中,如此一来,局部变量就成了对象内的字段。然后你可以再同一个对象,将这个大型的函数分解为多个小型函数。

    1)在看了这个例子中,其实还是觉得有点复杂,但是怎么说呢,意思到了。把其中一些复杂的逻辑封装在一个“容器”中。

12)Subsitute Algorithm(替换算法)

将函数替代另一种算法。

这个其实还是很简单的。不过这个不能算是重构的“技巧”了吧。