代码依旧需要重构
跟上篇文章一样,还是继续重构的话题,不过这次的重构已经向详细代码编写方向靠拢了。重构这本书,从第三章的开始,内容主要来源于编写代码过程中的“坏味道”。的确,随着代码量的增加,这些坏味道大多数都已经“尝过”,关键的问题在于当这些坏味道出现的过程中,你的思想是否会随之有所波动,看到写过这样的代码,是否有重构的一种思路,如果有就证明你已经有重构的思想了,现在就只剩下是how的问题了,从之后开始就开始学习怎么改变这些问题了。第四章的测试提到了测试的好处,我并没有细读。
书中前四章基本是对重构的一个概念和一个主题思路的描述,从第五章开始正式介绍重构的细节了,如果你已经清楚重构的思想,可以直接从第五章开始读了。
今天的主题在于第五章的内容,后面的文字算是笔记吧。
函数
ExtractMethod将具备独立操作的代码从函数中分离。原因目的:函数过长读起来费劲,颗粒度细化后override比较方便。
InlineMethod在函数调用点插入函数本体,然后移除该函数,与ExtractMethod相反。原因目的:清晰易读,也没什么说的,就觉得分开感觉冗余的就别分了,有其他的处理方式。
InlineTemp临时变量引用的动作,替换成对它赋值的表达式。原因目的在ReplaceTempWithQuery里面
ReplaceTempWithQuery将一个表达式提炼到一个独立函数,将临时变量的所有"被引用点"替换成"对新函数的调用"。动机:临时变量是暂时的,而且只能在所属函数中使用,所以会驱使你写出更长的函数。这个重构我觉得限制条件为这个变量可能只是被赋值很少的次数,如果过多的话运算重复量也随着大了。
IntroduceExplainingVariable一个复杂表达式的结果放进一个临时变量,以此变量来解释表达式用途。动机:表达式可能非常难以阅读,尤其在条件逻辑中if的条件可能存在多个结果的与或非组合。
SplitTemporaryVariable剖解临时变量,同一个变量(不是循环变量,也不是一个集用临时变量)被赋值超过一次。动机:单一职责,一个变量担任一个责任。
RemoveAssignmentstoParameters以一个临时变量取代该参数的位置,就是在一个方法体中,传入的参数需要改变的情况下,要建立一个符合命名规范的变量先从参数中获取,再进行操作。这里有个前提是改变的方式,所说的改变是对传值那类参数进行改变。
ReplaceMethodwithMethodObject将这个函数放进单独一个单独对象中,局部变量变成对象内的值域,然后就可以在同一对象中将这个大型函数分成多个小型函数。
SubstituteAlgorithm替换你的算法,如果你的算法有足够的混乱,建议你使用这个。
对象的搬移
MoveMethod搬移函数,有个函数与其所驻类之外的另一个类进行更多的交流,我们要做的是将这个函数搬移到另一个类中。动机:这个函数与其他的类有高度的耦合,这里我觉得他所说的两个类是在同一层次的类。
MoveField搬移值域某个值域被其所驻类之外的另一个类更多的用到。
ExtractClass提炼类建立一个新类,将相关值域函数搬移。动机:单一职责。
InlineClass将类的所有特性都合并到另一个类中,移除原类。与ExtractClass相反。
HideDelegate隐藏委托关系
RemoveMiddleMan移除中间人
IntroduceForeignMethod引入外加函数,在客户端类中建立一个函数,并且以一个服务类实体作为第一引数。
IntroduceLocalExtension引入本地扩展。
明天继续后面的东西。

浙公网安备 33010602011771号