重构:改善既有代码的设计 第三章 读书笔记()

目录 代码的坏味道

3.1 神秘命名(Mysterious Name)

  需要好的命名方式,有意义的命名方式

3.2 重复代码(Duplicated Code)

场景 方法
同一个类中出现重复代码 提取重复代码到一个函数中
重复代码在一个超类的不同子类中 函数上移 到 父类中
重复代码出现在无关的类中 把重复代码抽取到额外的一个类中
重复代码只是相似而不是完全相同 移动语句:把重复的代码合并在一起,然后再抽取

 3.3 过长函数(Long Function)

1- 抽取函数;

2- 减少临时变量:使用查询取代临时变量;

3- 减少参数个数;

4- 如果参数个数太多;

采用参数对象(固定的几个参数同时出现,又称“数据泥团”,提取成一个类)

保持对象完整进行简化(使用原有对象,而不是传输对象中的成员);

3.4 过长参数列表(Long Parameter List)

1- 查询取代参数;
2- 保持对象完整,直接传入原有的数据结构;
3- "数据泥团"参数包装成对象;
4- 如果某个参数被用作区分函数行为的标记;使用移除标记参数;

3.5 全局数据(Global Data)

  手段:封装变量。

    把全局数据用一个函数包装起来,至少你 就能看见修改它的地方,并开始控制对它的访问。 

  随后,最好将这个函数(及其 封装的数据)搬移到一个类或模块中,只允许模块内的代码使用它,从而尽量控 制其作用域。 

3.6 可变数据(Mutable Data)
3.7 发散式变化(Divergent Change)
3.8 霰弹式修改(Shotgun Surgery)
3.9 依恋情结(Feature Envy)
3.10 数据泥团(Data Clumps)
3.11 基本类型偏执(Primitive Obsession)
3.12 重复的switch (Repeated Switches)
3.13 循环语句(Loops)
3.14 冗赘的元素(Lazy Element)
3.15 夸夸其谈通用性(Speculative Generality)
3.16 临时字段(Temporary Field)
3.17 过长的消息链(Message Chains)
3.18 中间人(Middle Man)
3.19 内幕交易(Insider Trading)
3.20 过大的类(Large Class)
3.21 异曲同工的类(Alternative Classes with Different Interfaces)
3.22 纯数据类(Data Class)
3.23 被拒绝的遗赠(Refused Bequest)
3.24 注释(Comments)

————————

目录 代码的坏味道

3.1 神秘命名(Mysterious Name)

  需要好的命名方式,有意义的命名方式

3.2 重复代码(Duplicated Code)

场景 方法
同一个类中出现重复代码 提取重复代码到一个函数中
重复代码在一个超类的不同子类中 函数上移 到 父类中
重复代码出现在无关的类中 把重复代码抽取到额外的一个类中
重复代码只是相似而不是完全相同 移动语句:把重复的代码合并在一起,然后再抽取

 3.3 过长函数(Long Function)

1- 抽取函数;

2- 减少临时变量:使用查询取代临时变量;

3- 减少参数个数;

4- 如果参数个数太多;

采用参数对象(固定的几个参数同时出现,又称“数据泥团”,提取成一个类)

保持对象完整进行简化(使用原有对象,而不是传输对象中的成员);

3.4 过长参数列表(Long Parameter List)

1- 查询取代参数;
2- 保持对象完整,直接传入原有的数据结构;
3- "数据泥团"参数包装成对象;
4- 如果某个参数被用作区分函数行为的标记;使用移除标记参数;

3.5 全局数据(Global Data)

  手段:封装变量。

    把全局数据用一个函数包装起来,至少你 就能看见修改它的地方,并开始控制对它的访问。 

  随后,最好将这个函数(及其 封装的数据)搬移到一个类或模块中,只允许模块内的代码使用它,从而尽量控 制其作用域。 

3.6 可变数据(Mutable Data)
3.7 发散式变化(Divergent Change)
3.8 霰弹式修改(Shotgun Surgery)
3.9 依恋情结(Feature Envy)
3.10 数据泥团(Data Clumps)
3.11 基本类型偏执(Primitive Obsession)
3.12 重复的switch (Repeated Switches)
3.13 循环语句(Loops)
3.14 冗赘的元素(Lazy Element)
3.15 夸夸其谈通用性(Speculative Generality)
3.16 临时字段(Temporary Field)
3.17 过长的消息链(Message Chains)
3.18 中间人(Middle Man)
3.19 内幕交易(Insider Trading)
3.20 过大的类(Large Class)
3.21 异曲同工的类(Alternative Classes with Different Interfaces)
3.22 纯数据类(Data Class)
3.23 被拒绝的遗赠(Refused Bequest)
3.24 注释(Comments)