重构方法及简述列表(转载)

本文列举了72种重构方法,包括函数重构、数据重构、对象间特性搬移、简化条件表达式等多个方面,旨在帮助开发者改善代码结构和设计,提高代码质量。例如,通过提取方法、隐藏委托关系、以对象取代数组等技巧,可以更好地组织代码,降低复杂度,提高可维护性。
摘要由CSDN通过智能技术生成

最近,我以最快的速度浏览了一下《重构-改善既有代码设计》,不要说我不尊重这本书,但是,让我真的一条条的去coding没一个重构方法,我可能真的没有耐心,可能比较懒吧,我是这样打算的,先大体浏览一下这些重构的内容,知道大体的重构方法和需要重构的情况,当真的用到这个重构的时候,我再细细的来读这个部分,不知道这样对不对,但是我觉得这很适合我的方式,但是,有一条必须要注意的是,我们必须记住有那些主要的重构方法和需要这些重构方法的情况,下面我就把重构这本书上的重构方法和一些实用情况列举下来,这样可以帮助我们迅速查找。

重新组织你的函数

1.Extract Method 

  你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。

2.Inline Method

  一个函数,其本体应该与其名称同样清楚易懂。在函数调用点插入函数本体,然后移除该函数

3.Inline Temp

  你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构方法。将所有对该变量的引用动作,替换为对它赋值的那个表达式本身。

4.Replace Temp with Query

  你的程序以一个临时变量(temp)保存某一个表达式的运算结果。将这个表达式提炼到一个独立函数(query查询式)中。将这个临时变量的所有被引用点替换为对新函数的调用。新函数可被其他函数使用。

5.Introduce Explaining Variable

  你有一个复杂的表达式。将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。

6.Split Temporary Variable(剖析临时变量)

  你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量(collecting temporary variable)。针对每次赋值,创造一个独立。对应的临时变量。

7.Remove Assignments to Parameters

  你的代码对一个参数进行赋值动作。以一个临时变量取代该参数的位置。

8.Replace Method with Method Object

  你有一个大型函数,其中对局部变量的使用,使你无法采用Extract Method。将这个函数放在一个独立的对象中,如此一来局部变量就变成了对象内的值域,然后你可以在同一个对象中将这个大型函数分解为数个小型函数。

9.Substitute Algorithm(替换你的算法)

  你想要把某个算法替换为另一个更清晰的算法。将函数本体替换为另一个算法。

 在对象之间搬移特性

1.Move Method(搬移函数)

  你的程序中,有个函数与其所驻class之外的另一个class进行更多交流:调用后者,或被后者调用。在函数最常引用的class中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是将旧函数完全移除。

2.Move Field(搬移值域)

  你的程序中,某个field(值域)被所驻class之外的另一个class更多地用到。在target class 建立一个new field ,修改source field 的所有用户,令它们改用new field.

3.Extract class(提炼类)

  某个class做了应该由两个classes做的事情。建立一个新的class,将相关的值域和函数从就class搬移到新class。

4.Inline class(将类内联化)

  你的某个class没有做太多的事情(没有承担足够的责任)。将class的所有特性搬移到另一个class中,然后移除原class。

5.Hide Delegate(隐藏委托关系)

  客户直接调用其server object(服务对象)的delegate class。在sever端(某个class)建立客户所需要的所有函数,用以隐藏委托关系。

6. Remove Middle Man(移除中间人)

  某个class做了过多的简单委托(simple delegation).让客户直接调用delegate(受托类)。

7.Introduce Foreign Method(引入外加函数)

  你所使用的server class 需要一个额外函数,但你无法修改这个class。在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。

8.Introduce Loacal Extension(引入本地扩展)

  你所使用的server class 需要一些额外函数,但你无法修改这个class。建立一个新class,使它包含这些额外函数。让这个扩展品成为source class的subclass(子类)或(wrapper)外覆类。

      重新组织数据

1.Self Encapsulate Field(自封装值域)

  你直接访问一个值域(field),但与值域直接的耦合关系变得逐渐变得笨拙。为这个值域建立取值/设值函数,并且只有这些函数来访问值域。

2.Replace Data value with Object(以对象取代数据值)

  你有一笔数据项(data item),需要额外的数据和行为。将这笔数据项变成一个对象。

3.Change Value to Reference(将实值对象改为引用对象)

  你有一个class,衍生出许多相等视图(equal instance),你希望将它们替换为单元对象。将这个 value object(实值对象)变成一个reference object(引用对象)

4.Change Reference to Value(将引用对象改为实值对象)

  你有一个reference object(引用对象),很小且不可变,而且不易管理。将他变成一个value object(实值对象)。

5.Replace Array with Object(以对象取代数组)

  你有一个数组(array),其中的元素个各自代表不同的东西,以对象替换数组。对于数组中的每个元素,以一个值域表示之。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值