在书写代码时,有一些不好的习惯,形象点说,可以说成代码的“坏味道”,以下是一些常见的代码的坏味道:
1. Duplicated Code(重复的代码)
常见情况:
1) 同一个类中class内的两个函数含有相同表达式;
2) 两个互为兄弟的子类内含有相同表达式;
3) 两个毫不相关的类中出现重复的代码。
对于第1种情况,使用Extract Method重构规则提炼重复代码,让这两个地点都调用提炼出的那段代码。
对于第2种情况,首先使用Extract Method重构规则提炼重复代码,接着将提炼出来的代码使用Pull Up Method这条重构规则将其提取到超类中。
对于第3种情况,常常使用Extract Class重构规则将代码提取到一个独立的类中。
2. Long Method(过长的函数)
99%的场合,要把函数变小,只需使用Extract Method重构规则。找到函数中适合集在一起的部分,将它们提炼出来形成一个新函数。
3. Large Class(过大类)
可以使用Extract Class和Extract Subclass两条重构规则将一个过大的类变成多个小的类。
4. Long Parameter List(过长参数列)
如果“向既有对象发出一个请求”就可以取得原本位于参数列上的一份数据,那么可以通过Replace Parameter with Method重构规则来解决这个问题。还可以使用Rreserve Whole Object重构规则将来自同一对象的一堆数据手机起来,并以该对象替换它们。如果某些对象缺乏合理的对象归属,可使用Introduce Parameter Object重构规则为它们制造出一个“参数对象”。
5. Middle Man(中间转手人)
人们可能过度运用delegation。你也许会看到某个类接口有一半的函数都委托给其他class,这样就是过度运用,可以使用Remove Middle Man这条重构规则之间和实责对象打交道。如果转手人还有其他行为,可以运用Replace Delegation with Inheritance这条重构规则,将它变成实责对象的子类,这样你既可以扩展原对象的行为,又不必负担那么多的委托工作。
6. Incomplete Library Class(不完美的程序库类)
如果只想修改library classes内的一两个函数,可以使用Introduce Foreign Method重构规则;如果想要添加一大堆额外行为,就得使用Introduce Local Extension重构规则。
7. Refused Bequest(被拒绝的馈赠)
子类应该继承超类的函数和数据,如果它们不想或不需要继承,这就意味着继承体系设计有误,此时可以使用Replace Inheritance with Delegation重构规则。
8. Comments(过多的注释)
如果你需要注释来解释一段代码做了什么,试试使用Extract Method重构规则;如果方法已经被提取出来,但还是需要注释来解释其行为,试试Rename Method重构规则;如果你需要注释说明某些系统的需求规则,试试Intrduct Assertion重构规则。
参考:
《重构——改善既有代码的设计》
posted on 2008-06-22 13:56
阿蜜果 阅读(2361)
评论(1) 编辑 收藏 所属分类:
Java