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