我的重构步骤:重构两份过程一致、中间数据类型不一致的超长函数

本次重构应该先后有 8项小工作 需要做:

一、分解函数,将超长函数分解为若干个小函数,然后在原函数中调用。(只分解一份,另一份先不要动)

二、新建一个类, 把分解后的小函数 及被分解的原函数 复制到该类中, 并将被分解的原函数的访问修饰符 修改为public。

三、处理新类,将新类中 访问不到的东西【因为代码是复制过来的,很有可能某些东西访问不到了】,借助类的全局变量或参数 处理掉。直到可以通过编译,即没有语法错误为止。

四、建立一个新类的对象,并调用其中的public方法,将原有方法替换掉【此时需要注意步骤三中访问不到的数据,酌情处理】。

五、注释掉不需要的代码。编译、调试。

完成步骤五后, 重构超长函数就基本完成了。

六、找出两份代码中 中间数据不一样的类型,然后用其公共“父类型”代替【例如:object】。

七、处理类型转化,注意防止类型转换失败,还有空指针。

八、处理第二份源码,需要从依次完成步骤 四、五、六、七。

 

像这样的重构,最关键的是类型处理 和 类型转化,应该选用最恰当的类型,object 并不是最好的选择。

重构 可以看作是一点一滴的复制修改代码,并伴随不断的编译调试,如果涉及到的逻辑有些复杂最好配合测试用例一起重构。

 

——————————————————————————————————————————————————————————

——————————————————————————————————————————————————————————分割线

上面说的是重构的大致步骤,现在开始说重构的几个细节。

一、分解超长函数时,分解局部变量的技巧 【代码特征,重复利用变量、一个变量将代表N种含义】

代码大致如下:

int index = 0;
// 使用index...
index = 15;
// 使用index...
index = -10;
// 使用index...


此时可以以三次index的赋值为分解点,分别分解为 index1 index2 index3三个变量,然后使用对应变量。此时就可以轻松分解函数了。

二、寻找合适的 “父类型”

string 和 TextBox 有公共的父类型,是 TextBox, TextBox有Text属性、可以记录string。【呵呵,一个例子就能说明问题了】

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-04-09 19:17  把爱延续  阅读(297)  评论(0编辑  收藏  举报