auto commit

This commit is contained in:
CyC2018 2018-03-04 15:34:52 +08:00
parent c9fd81f261
commit cadf3c47f9

View File

@ -33,7 +33,6 @@
* [21. Refused Bequest被拒绝的馈赠](#21-refused-bequest被拒绝的馈赠)
* [22. Comments过多的注释](#22-comments过多的注释)
* [构筑测试体系](#构筑测试体系)
* [重构列表](#重构列表)
* [重新组织函数](#重新组织函数)
* [1. Extract Method提炼函数](#1-extract-method提炼函数)
* [2. Inline Method内联函数](#2-inline-method内联函数)
@ -270,7 +269,7 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
## 5. Divergent Change发散式变化
一个类受到多种变化的影响;
设计原则:一个类应该只有一个引起改变的原因。也就是说,针对某一外界变化所有相应的修改,都只应该发生在单一类中。
针对某种原因的变化,使用 Extract Class 将它提炼到一个类中。
@ -278,17 +277,19 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
一个变化引起多个类修改;
使用 Move Method 和 Move Field 把所有需要修改代码放到同一个类中。
使用 Move Method 和 Move Field 把所有需要修改代码放到同一个类中。
## 7. Feature Envy依恋情结
一个函数对某个类的兴趣高于对自己所处类的兴趣,通常是过多访问其它类的数据
一个函数对某个类的兴趣高于对自己所处类的兴趣,通常是过多访问其它类的数据
使用 Move Method 将它移到该去的地方,如果对多个类都有 Feature Envy先用 Extract Method 提取出多个函数。
## 8. Data Clumps数据泥团
有些数据经常一起出现,比如两个类具有相同的字段、许多函数有相同的参数。使用 Extract Class 将它们放在一起。
有些数据经常一起出现,比如两个类具有相同的字段、许多函数有相同的参数,这些绑定在一起出现的数据应该拥有属于它们自己的对象。
使用 Extract Class 将它们放在一起。
## 9. Primitive Obsession基本类型偏执
@ -296,6 +297,8 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
## 10. Switch Statementsswitch 惊悚现身)
具体参见第一章的案例。
## 11. Parallel Inheritance Hierarchies平行继承体系
每当为某个类增加一个子类,必须也为另一个类相应增加一个子类。
@ -332,19 +335,23 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
## 18. Alernative Classes with Different Interfaces异曲同工的类
两个函数做同一件事,却有着不同的签名。
使用 Rename Method 根据它们的用途重新命名。
## 19. Incomplete Library Class不完美的类库
类库的设计者不可能设计出完美的类库,当我们需要对类库进行一些修改时,可以使用以下两种方法:如果只是修改一两个函数,使用 Introduce Foreign Method如果要添加一大堆额外行为使用 Introduce Local Extension。
## 20. Data Class幼稚的数据类
它只拥有一些数据字段。
它只拥有一些数据字段,以及用于访问这些字段的函数,除此之外一无长物
找出字段使用的地方,然后把相应的操作移到 Data Class 中。
## 21. Refused Bequest被拒绝的馈赠
子类继承超类的所有函数和数据,但是它只想要一部分
子类不想继承超类的所有函数和数据。
为子类新建一个兄弟类,不需要的函数或数据使用 Push Down Method 和 Push Down Field 下推给那个兄弟。
@ -356,14 +363,14 @@ Extract Method 会把很多参数和临时变量都当做参数,可以用 Repl
Java 可以使用 Junit 进行单元测试。
单元测试的对象是类的方法,而功能测以客户的角度保证软件正常运行。
测试应该能够完全自动化并能检查测试的结果。Junit 可以做到。
小步修改,频繁测试。
单元测试的对象是类的方法,而功能测是以客户的角度保证软件正常运行。
应当集中测试可能出错的边界条件。
# 重构列表
小步前进,频繁测试。
# 重新组织函数
## 1. Extract Method提炼函数