《重构-改善既有代码的设计》-坏味道部分笔记

《重构-改善既有代码的设计》-坏味道部分笔记

2018, Apr 19    
  1. 重复代码
    【提炼函数,上移函数,提炼模板方法,提炼类】
  2. 过长函数
    【提炼函数,用查询替代临时变量,引入参数对象,分解条件表达式】
  3. 过大的类
    【提炼类,提炼子类,提炼接口,用对象取代数据值】
  4. 过长参数列表
    【用方法替换参数,引入参数对象,保持对象完整】
  5. 发散式变化:类经常因为不同的原因在不同的方向上发生变化。(一个类受多种变化的影响)
    【提炼类】
  6. 霰弹式修改:类的某种改动都必须在不同的类中做许多小修改。(一种变化引发多个类的修改)
    【移动方法,移动数据,将类内联化】
  7. 依恋情结:函数对某个类的兴趣高过对自己所处类的兴趣
    【移动方法,移动数据,提炼方法】
  8. 数据泥团:总是绑在一起的数据
    【提炼类,引入参数对象,保持对象完整】
  9. 基本类型偏执:都尽量用基本类型。(总被放在一起的字段,参数列中,数据中挑数据等等)
    【用对象取代数据值,提炼类,引入对象参数,用对象取代数组,用类取代类型码,用子类取代类型码, 用Stat/Strategy取代类型码】
  10. switch惊悚现身:少用switch。(经常发现同样的switch语句在不同的地方,每次添加新的case都要在不同地方修改)
    【用多态取代条件,用子类取代类型码, 用Stat/Strategy取代类型码,用明确方法取代参数,引入空对象】
  11. 平行继承体系:如果为一个类添加一个子类,都必须为另一个也添加
    【移动方法,移动数据】
  12. 冗赘类
    【将类内联化,折叠继承体系】
  13. 夸夸其谈的未来性
    【折叠继承体系,将类内联化,移除参数,重命名方法】
  14. 令人迷惑的暂时字段:某种实例变量只为某种特定情况设定
    【提炼类,引入空对象】
  15. 过度耦合的消息链:一个请求另一个,然后另一个再继续请求下一个
    【隐藏委托】
  16. 中间人:某个类中有一般的函数都委托给了其他类
    【移除中间人,将类内联化,用继承取代委托】
  17. 狎昵关系:两个类过于亲密,花费太多时间探究彼此的Private成分
    【移动方法,移动数据,将双向引用改为单向引用,用委托取代继承,隐藏委托】
  18. 异曲同工的类:两个函数做同样的事,但是有不一样的签名
    【重命名方法,移动类】
  19. 不完美的类库
    【引入外部方法,引入本地方法】
  20. 纯粹的数据类:拥有一些字段,一起getter,setter,除此之外一无所长
    【移动方法,封装数据,封装集合】
  21. 被拒绝的馈赠:子类复用了超类的行为,却又不愿意支持超类的接口。
    【用委托取代继承】
  22. 过多的注释:长长的注释往往意味着代码很糟糕。
    【提炼方法,引入断言】