代码的异味
一.duplicated code
当相同或者相似的程序结构出现在一个以上的地方的时候,这段代码就需要合而为一,提炼出一个方法共调用。
分为3种情况,
1.同一个类的两个函数含有相同的表达式。
处理方式:使用extract method提炼出这重复代码,然后在这两个地方调用这个函数。
2.互为兄弟的两个子类含有相同的表达式
处理方式:对这两个类extract method提炼出重复代码到一个函数,然后采用pull up method推入他们的超类中。
3.两个无关的类中出现dulicated code。
处理方式:采用extract method提炼出重复代码,并将重复代码放到一个合适的类中(可以是单独的一个独立的类,也可以是这两个类中的一个。这个根据设计中职责划分的原则选择),然后在原来出现的地方调用这个方法。
二.long method
小型函数的有点:自解释能力,共享能力,选择能力(使用多态特性封装条件逻辑)。
为避免logn mehtod我们应该积极的分解函数,分解的过程中应遵循一个原则:每当感觉需要以注释来说明一段代码做什么事情的时候,就应该把这段代码封装到一个函数同,并以其用途或者功能(也就是注释的内容)来为其命名。
处理方式:使用extract method提炼函数。
提炼函数的过程中可能需要将大量的参数和临时变量当作新函数的参数传递过来使用,这会引起提炼出的函数参数过长。一般遇到这个问题可以使用replace temp with query来消除这些临时变量,采用instroduce parameter object 和 preserve whole object则可以将过长的参数列表变得简洁。
如果经过上述的处理后仍然有太多临时变量和参数,我们就可以使用repace method with method object。
三.large class