代码的坏味道
如果想要重构代码,则不仅需要了解如何重构,还需要了解需要何时重构、何时已经达到了满意的效果避免过度重构。在《重构:改善既有代码的设计》一书中,提到了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