c#开发旅程

收集了所有我自己开发历程使用到过的所有点点滴滴 可能有时引用了他人的文章而没有注明请见谅

博客园 首页 联系 订阅 管理
一些重要的重构方法
                                                               ----《测试驱动开发实用指南》P19
1.提取类(Extract Class)   当一个类变得太大或其行为逻辑组织分散时,我们需要将其切分成多块内聚的行为并在需要的情况下创建新类。提取类涉及将其中的某组织行为抽取到一个新的类中去。我们想要使用这种重构的方法的另一个原因是我们需要某种行为的多种实现。对于这种情况,我们可以把易变的代码拆分到一个独立的类中。之后,我们可以从这个类中提取接口(interface),然后分别编写所要求的实现。
2.提取接口(Extract interface)   我们想要提取接口可能出于几种原因。我们或许想要对具体的实现进行抽象,以便更容易地使用模拟对象(Mock Objects)的技术。通过接口定义系统中的各组重要行为往往是很方便的。
3.提取方法(Extract Method)   当一个方法太长或是逻辑过于复杂而不易理解时,我们可以将其中的某些部分提取出来而形成各自独立的方法。
4.用子类来代替类型代码(Replace Type Code with Subclasses)当我们的类使用类型代码来表示子类型的时候(例如,雇员要么是工程师要么是销售员),就可以使用重构方法。我们针对每种类型分别设计子类,这样做往往能够有助于打破那些根据类型编码进行判别的复杂条件判断和switch语句。
5.用多态来代替条件判断(Replace Conditional with Polymorphism)当我们发现有switch语句的时候,就可以考虑创建子类来处理各种不同的情况。从而去掉switch。
6.形成模板方法(Form Template Method)当我们在多个类中都有某种具有相同结构但不同细节的相似方法时就可以使用这种重构方法我们最终要把这个具体有相同结构的方法安置在超类中(我们也许需要创建这样的超类),并把提取出来的具体方法安置在子类中。多态会负责调用恰当的具体方法。
7.引入解释变量(Introduce Explaining Variable)   当我们的表达式复杂且难以理解时,我们就可以提取其中的某些部分,把中间结果保存在命名清楚的临时变量中。这样就把表达式切分成易于理解的片段,从而使整个表达式更加清晰
8.使用工厂方法来代替构造方法(Replace Constructor with Factory Method)   由于在Java和C++中(与Smalltalk不同)所有的构造方法都是具有相同的名字,所以当存在多个用于创建类的不同种类的实例(different flavors)的构造方法时,就很容易让人搞不清楚,对此我们不使用硬性编码(hard-coded)的构造方法而使用静态工厂方法,这样我们就能给每个这样的方法起一个有意义的名字。
9.用委托来代替继承(Replace Inheritance with Delegation)   我们应当只有在子类是特殊种类的超类,或子类对超类进行扩展而不仅仅是覆写(override)超类的部分功能时,才能使用继承。如果我们只是为了重用超类的某些功能而使用继承的话,那么就应该用委托来代替。
10.使用符号常量代替魔幻数字(Replace Magic Number with Symbolic Constant)   在代码中嵌入硬性编码的数值是一种非常不好的习惯,这样的数值很难分辨,改变它们又会引发霰弹式手术(shotgun surgery),而且这压根儿就属于一种形式的重复(duplication)。我们可以使用命名良好的符号常量来代替它们。那么,当需要改动的时候,我们就到一个地方去改就行了。这样更具有一般性,适用于诸如字符串在内的任何数值。
11.使用卫述语句来代替嵌套的条件判断(Replace Nested Conditiional with Guard Clauses)   我们接受的教导就是一个方法应当只有单一的出口(即return 语句)这样要求没有正当的理由,肯定不是出于对代码清晰程度的考虑。对应当在多种条件下退出的方法来说,就会导致复杂,嵌套的条件判断语句。这时一种更好,更清晰楚的解决方法就是采用卫述句来返回

posted on 2006-09-07 10:47  Kinbor  阅读(466)  评论(0编辑  收藏  举报