代码坏的味道:(以下这些现象意味着你该重构了)
1.Duplicated Code(重复代码)(提炼出公共代码)
2.Long Method(函数过长)
3.Large Class(过大的类)
4.Long Parameter List(过长的参数列表)(可通过ADT来简化参数)
5.Divergent Change(发散式变化)没有该味道的代码应该是这样(一旦需要修改,我们希望跳到系统的某一点,只在该处修改)
6.Shotgun Surgery(散弹式修改)(遇到某种变化时,你都必须在许多不同的类内做出许多小修改,要修改的代码遍布四处)
7.Feture Envy(依恋情节)(如果某个函数为了计算某个值,从另外一个对象调用了几乎半打的取值函数,那么就该考虑吧这个函数移到另外一个地方了。此类问题还有很多例子)
8.Data Clumps(数据泥团)(2个类中有系统的字段,许多函数相同时,那么就该考虑提炼出类了,把数据的注意力转向函数)
9.Primitive Obsession(基本类型的偏执)(有时候基本数据类型比ADT更实用)
10.Switch Statements(面向对象语言明显特征就是 尽量用要用多态来替代switch case)
11.Parallel Inheritance Hierarchies(平行继承体系)
12.Lazy Class(冗余类)(如果一个类没多少价值,请去掉吧)
13.Speculative Generality(夸夸其谈未来性)如果企图各种各样的手法,来处理一些非必要的事情(未来需要用这个东西),那么结果往往造成系统更难维护和理解,慎重考虑
14.Temporary Field(暂时字段)(如果类中某个变量只是为了某种特殊情况而设,这样的代码不易理解,因为通常认为在类中的变量 所有对象都要需要,请提炼出来)
15.Message Chains(过度耦合的消息链)(如果看到一个对象请求另外一个对象然后在请求另外一个对象,你可能会见到getThis 或者一长串的临时变量,这种意味着结构紧密耦合,一旦对象间发生变化,那么客户端就不得不变化了。。。解决办法:先观察消息链最终是干嘛,看看能否提炼出独立的函数 等等)
16.Middle Man(中间人的过度使用)(如果某个类的接口有一般函数都 在委托其他类,那么久应该移除这个类了, 或者变成子对象 )
17.Inappropriate Intimacy(不恰当的亲密关系)(如果2个类关系太紧密,请慎重考虑这2个类的关系)
18.Alternative Class With Different Interfaces(异曲同工的类)(如果2个类 或者函数的行为差不多,那么可以考虑提炼,去掉冗余代码)
19.Data Class(纯粹的数据类)(让他多做点事吧)
20.Refuse Bequest(被拒绝的遗赠)(在继承体系中,如果子类只具备父类部分特性,或者部分函数,那意味着这个继承体系是错误的,特别是 抽象超类)