重构----学习心得

1、重构技术系以微小的步伐修改程序。如果你犯下错误,很容易便可发现它。

2、重构在名词上可理解为:对软件内部结构的一种调整,目的是在不改变“软件之可察行为”的前提下,提高其可理解性,降低其修改成本。

3、重构在动词上可理解为:使用一系列重构准则(手法),在不改变“软件之可察行为”的前提下,调整其结构。

4、重构的另外一个原因:为了帮助我理解需要修改的代码。这些代码可能是别人写的,也可能是自已写的。

when:

  1、Duplicated Code(重复的代码):同一class中重复代码可选择提取出方法,然后调用;互为兄弟class,则可选择提取出类superclass;如果2个毫不相关的class,

    则可以考虑对其中一个使用extract class,提取出重复代码到一个独立的class,然后在另外一个class内使用这个新类,所以决定这个函数放在那最合适才是最重要的,

    至少要确保它被

  2、Long Method(过长函数):每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立的函数,并以其用途命名。ps:如果函数内有大量的参数和临时变量,

    它们会对你函数提炼形成障碍。如果只是单单的Extract Method,只会使参数和临时变量转换为参数,并没有多大提升。可以采用Replace Temp with Query来消除这些元素。

    Introduce Paramter Object 和 Preserve Whole Object则可以将过长的参数列变得简洁一些。如果上述步骤都试过了,任然有太多临时变量和参数,那就应该采用Repalce 

    Method with Method Object。如果存在条件式和循环常常也是提炼的信号。可以采用Decompose Conditional处理条件式。至于循环,则是提炼为一个函数。

何时不该重构:1、有时候既有代码实在太混乱,重构它还不如重新写一个来的简单。

       2、项目已近最后期限,也应该避免重构。

 ps: 哪怕你完全了解系统,也请实际测量它的性能,不要臆测。臆测会让你学到一些东西,但十有八九你是错的。

eg:如果在去旧留新的代码基础上,保留新接口的功能,在旧接口与新接口差距不大的情况下,可以通过对旧接口返回数据封装VO的方法,保证在改变

接口写法的前提下,旧接口返回的数据接口任然不变。

解释:

Replace Temp with Query 可参考 http://www.cnblogs.com/matchcolor/archive/2010/07/27/1785693.html

Introduce Paramter Object 可参考 http://book.51cto.com/art/201002/182694.htm

Preserve Whole Object 可参考 http://www.cnblogs.com/matchcolor/archive/2010/07/27/1785695.html

Repalce  Method with Method Object 可参考 http://my.oschina.net/u/134516/blog/127200 or http://blog.csdn.net/bendan999999999/article/details/3255156

Decompose Conditional 可参考 http://www.cnblogs.com/matchcolor/archive/2010/07/27/1785697.html

  

重构手法:引用 -- http://www.cnblogs.com/matchcolor/tag/%E9%87%8D%E6%9E%84/

原文地址:https://www.cnblogs.com/binbang/p/4953092.html