代码的坏味道

如果想要重构代码,则不仅需要了解如何重构,还需要了解需要何时重构、何时已经达到了满意的效果避免过度重构。在《重构:改善既有代码的设计》一书中,提到了22种类型的bad code:

1.Duplicated Code

如果同一个类或两个不同类的两个函数拥有相同的表达式和语句,应该第一时间想到抽取重复代码放在合适的位置比如独立类或者父类中,如果相似不全相同则可以通过template method设计模式处理,最大程度避免代码冗余。

2.Long Method

一般而言函数越长越难理解,现在的Object-Oriented语言基本上免除了进程内的函数调用开销。应该积极地按照功能点分解函数,并且做到函数命名能够解释其用途。

3.Large Class

如果一个类过大,那么往往会在使用的过程中产生很多实例变量,并且一般不会一直使用所有实例变量,因而出现很多重复代码。可以将类中彼此关系比较紧密的变量放在一起,进而拆解出多个功能明确的新类。

4.Long Parameter List

太长的参数列增加了理解难度,并且可能会造成前后不一致,维护困难等问题。可以通过对象的形式传递参数,或者以提取get函数取代参数。

5.Divergent Change

如果某个类经常因为不同的原因而在不同的方向上变化,那么就需要考虑拆分当前的类为更小的粒度,针对某一外界变化的所有相应修改都应该只发生在一个单一类中,而这个新类的所有内容都应该反应此变化。

6.Shotgun Surgery

如果对于一种变化能够引起“牵一发而动全身”的修改,就需要考虑把一系列相关的行为放进一个现有的合适的类或者提取新类了。

7.Feature Envy

数据应该和其对应的操作行为绑定一起,如果发生了交叉,那么最好进行改造和移动。

8.Data Clumps

类似Duplicated Code,如果多个类用于相同的字段,许多函数签名中拥有相同的参数,考虑将它们提炼到一个独立对象中。

9.Primitive Obsession

10.Switch Statemens

11.Parallel Inheritance Hierarchies

12.Lazy Class

13.Speculative Generality

14.Temporary Field

15.MEssage Chains

16.Middle Man

17.Inappripriate Intimacy

18.Alternative Classes with Different Interfaces

19.Incomplete Library Class

20.Data Class

21.Refused Bequest

22.Comments