1、重复代码(Duplicated Code)
也许在同一个类中的某两个或者多个函数中有相同的表达式(即代码)--提炼一个新的方法,或者兄弟类中有实现相同功能的方法或者表达式--提炼新的方法并提到适当父类,再有模板方法也是哦,还有其他的迹象,唯一不变的就是看上去实现的相同或者相似的功能。
2、过长的函数(Long Method)
当你一个方法动辄两三百行或者五六百行,这里面一定有可以重构的地方,一定是在一个方法里面做了N多件事情,你能够把这样的一个方法拆分为多个新的小的函数,不行你可以回顾自己写个的code。
3、过大的类(Large Class)
类太庞大,说明干的事儿就多,那这么多事儿当中是否能够提炼出新的类,就像现实当中一样,事情还得交给专业的人干才会不出差错,也许一个人啥都会一点但都不会精通,一旦深入还得找专业人士。
4、太长的参数列表(Long Parameter)
如果一个方法传入的参数有那么七八个以上,你是否会感觉头晕目眩然后想丢下不管 了。这时你可以用参数对象、以函数取代参数、保持对象完整性来减少传入的参数个数,这样一来就会简洁很多,而且传的参数多也行干的事儿就多,也行能够拆分为更多的方法也说不定。
5、发散式变化(Divergent Change)
一个类引发多种变化影响。
6、Shotgun Surgery
一种变化引发多个类相应修改。
7、依恋情节(Feature Envy)
函数对某个类的兴趣高过对自己所处类的兴趣。
8、数据泥团(Data Clumps)
两个雷中相同字段、许多函数签名中相同的参数。
9、基本类型偏执(Primitive Obsession)
10、Switch Statements(Switch 惊悚现身)
大多数时候,一看到switch语句,就应该考虑以多态来替换它(单一函数中有些选择视力除外)。
11、平行继承体系(Parallel Inheritance Hierarchies)
Shotgun Surgery的特殊情况。当你为某个类添加一个子类也必须为另一个类添加一个子类,如果你发现某个继承体系的类名称前缀或者后缀和另外iyige继承体系的类名称前缀或者后缀完全相同。
12、冗赘类(Lazy Class)
如果一个类的所得不值其身价,它就应该消失。
13、想多了(Speculative Generality)
事先向的太多,最后确没用到这么多。没用到就应该拿掉。该删掉删,该改名的改名。
14、令人迷惑的临时字段(Temporary Field)
某个实例变量仅为某种特殊情况而设--提炼一个新类。
15、过度耦合的消息链(Message Chains)
16、中间人(Middle Man)
17、Inappropriate Intimacy
18、异曲同工类(Alternative Classes with Different Interface)
19、不完美库类(InComplete Library Class)
20、纯稚的数据类(Data Class)
21、被拒绝的遗赠(Refused Bequest)
22、过多的注释(Comments)
用注释来解释代码糟糕的代码,或者没有更新注释。