代码技能之重构


在软件工程中,建立完美的需求与设计,按照既有的规范编写标准统一的代码。
但是这只是个美好的愿望。

需求会改变,设计也会改变,程序员写出的代码也需要改变。修改代码不紧紧是为了完成
业务功能,还需要考虑其他的一些问题,比如以后对该代码维护是否容易。
这里代码是否容易维护包括:
1.代码维护者是否能很容易读懂你的代码。
2.代码维护者是否能够很方便修改你的代码。
      
当你担负着额外的责任来修改代码时,有一个很光鲜的名字来表示它,就是:重构。

重构代码,既是一个程序员的责任,也是一个可能发现bug的方式,甚至还能提高编程速
度。总之有很多好处。

代码重构之后,可能会给软件项目带来bug,或者程序运行性能降低,或者过多的重构延
误了项目的交付日期。总之也有很多坏处。

现在说到这里看似碰到了很多问题。我们知道问题肯定不仅仅是上面这些!!
有关重构的问题国外有牛人研究过(还包括学术方面的研究哦),并且给出了一些具体的
解决问题的措施和建议。如果有同学想了解些重构方面的东西的话,可以考虑买本Martin
Fowler的《Refactoring Improving the Design of Existing Code》了解下。这本书中
文译本翻译的也不错。
我最近正在读这本书。感觉很不错!!!
---------------------------------------
代码有那些重构手法呢?
一、重新组织函数部分
1.Extract Method
2.Inline   Method
3.Inline   Temp
4.Replace Temp with Query
5.Introduce Explaining Variable
6.Split  Temporary Variable
7.Remove Assignments Parameters
8.Replace Method with Method Object
9.Substitue  Algorithm


二、简化条件表达式
1.Decompose Conditional
2.Consolidate Conditional Expression
3.Consolidate Duplicate Conditional Fragments
4.Remove Control Flag
5.Replace Nested Conditional with Guard Clause
6.Replace Conditional with Polymorphism
7.Introduce Null Ojbect
   这个东西有点高深,正在理解。
8.Introduce Assertion

上面这两种类型的重构,我觉得最实用。在最近的项目中,我试图在运用这些东西。
目标一:
代码要写的漂亮,写尽量少的注释,读代码本身就像读注释一样。

三、简化函数调用
1.Rename Method
2.Add Parameter
3.Remove Parameter
4.Parameterize Method
5.Replace Parameter with Explicit Methods
6.Preserve Whole Object
7.Replace Parameter with Methods
8.separate Query from Modifier
9.Introduce Parameter Object
10.Remove Setting Method
11.Hide Method
12.Replace Constructor with Factory Method
13.Encapsulate Downcast
14.Replace error code with Exception
15.Replace Exception with Test

在程序中总能看到不同的人有不同的编程特点。有些程序很明显是可以通过上面的一些
手法来重构的,但是就是不去这么做,宁愿写重复代码,宁愿干自己都觉得不合理的事
情。因为在项目中,怕承担风险是人趋利避害的一个本性。所以这种想法是代码越来越
丑陋的一个很大因素。

四、重新组织数据
1.SelfEncapsulate Field
2.Replace Data Value with Object
3.Change Value to Reference
4.Change Reference to  Value
5.Replace Array with Object
6.Duplicate Observed Data
7.Change Unidirectional Association to Bidirectional
8.Change Bidirectional Association to Unidirectional
9.Replace Magic Number Symbolic Constant
10.Encapsulate Field
11.Encapsulate Collection
12.Replace Record with Data Class
13.Replace Type Code with Class
14.Replace Type Code with subclass
15.Replace Type Code with State/Strategy
16.Replace Subclass with Fields

这一部分的重构方法里,象6,14,15等助于掌握某些设计模式,比如观察者模式,策
略模式等。接下来两类重构手法通常也是和上面这个手法结合使用。因为它们的主要关
注点是对对象和类进行的重构。

五、在对象中搬移特性:
1.Move Method
2.Move Field
3.Extract Class
4.Inline  Class
5.Hide Delegate
6.Remove Middle Man
7.Introduce Foreign Method
8.Introduce Local    Extension

六、处理概括关系
1.Pull up Field
2.Pull up Method
3.pull up Constructor Body
4.Push down Method
5.Push down Filed
6.Extract Subclass
7.Extract Superclass
8.Extract Interface
9.Collapse Hierarchy
10.Form Tem Plate Method
11.Replace Inheritance  with Delegation
12.Replace Delegation with Inheritance









TODO

猜你喜欢

转载自eyeit2000.iteye.com/blog/1942271