首页 > 代码库 > 重新组织函数--《重构》阅读笔记
重新组织函数--《重构》阅读笔记
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(替换算法)
将函数替代另一种算法。
这个其实还是很简单的。不过这个不能算是重构的“技巧”了吧。