代码的坏味道
- 重复代码(Duplicated Code)
- 过长函数(Long Method)
- 过大的类(Large Class)
- 过长参数列表(Long Parameter List)
- 发散式变化(Divergent Change)
- 散弹式修改(Shotgun Surgery)
- 依恋情节(Feature Envy)
- 数据泥团(Data Clumps)
- 基本类型偏执(Primitive Obsession)
- Switch惊悚现身(Switch Statements)
- 平行继承体系(Parallel Inheritance Hierarchies)
- 冗赘类(Lazy Class)
- 夸夸其谈未来性(Speculative Generality)
- 令人迷惑的暂时字段(Temporary Field)
- 过度耦合的消息链(Message Chains)
- 中间人(Middle Man)
- 狎昵关系(Inappropriate Intimacy)
- 异曲同工的类(Alternative Classes with Different Interfaces)
- 不完美的库类(Incomplete Library Class)
- 纯稚的数据类(Data Class)
- 被拒绝的遗赠(Refused Bequest)
- 过多的注释(Comments)
重复代码(Duplicated Code)
- 同一个类中的两个函数
- 互为兄弟的子类内
- 两个毫不相关的类
过长函数(Long Method)
- 程序越长越难让人理解
- 应该遵循:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名
过大的类(Large Class)
- 使用Extract Class 和 Extract Subclass方法将几个相关的变量一起提炼至新类
过长参数列表(Long Parameter List)
- 如果你手上没有所需的东西,总可以叫另一个对象给你
- Replace Parameter with Method
发散式变化(Divergent Change)
- 我们希望,软件一旦需要修改,能够跳到系统的某一点,只在该处做修改
- 针对某一外界变化的所有相应修改,都只应该发生在单一类中,而这个新类内的所有内容都应该反应此变化,为此,你应该找出某特定原因而造成的所有变化,然后运用Extract Class将它们提炼到另一个类中。