重构手法列表——简化函数调用

函数改名(Rename Method)

现象:函数的名称未能揭示函数用途
动机:一个好的名称对程序解释起到非常大的作用
做法:修改函数名称

添加参数(Add Parameter)

现象:某个函数需要从调用端得到更多的信息
动机:需要信息
做法:为此函数添加一个对象函数,让该对象带进函数所需信息

移除参数(Remove Parameter)

现象:函数本体不需要某个参数
动机:多余无用的参数,会让函数本身难以理解
做法:将该参数去除

将查询函数和修改函数分离(Separate Query from Modifier)

现象:某个函数既返回对象状态值,又修改对象状态
动机:一个查询函数不应该有副作用,有副作用的查询函数会使得查询函数失去幂等性
做法:建立两个不同的函数,其中一个负责查询,另一个负责修改

令函数携带参数(Parameterize Method)

现象:若干函数做了类似的工作,但在函数本体中却包含了不同的值
动机:去除重复代码
做法:建立单一函数,以参数表达那些不同的值

以明确函数取代参数(Replace Parameter with Explicit Method)

现象:一个函数其中完全取决于参数值而采取不同行为
动机:在能预见参数值范围不会膨胀下,采用明确函数更能表达方法的目的
做法:针对该参数的每一个可能值,建立一个独立函数

保持对象完整(Preserve Whole Object)

现象:从某个对象中取出若干值,将它们作为某一次函数调用时的参数
动机:万一函数修改需要新的数据项,就需要修改每个该函数的调用点
做法:改为传递整个对象

以函数取代参数(Replace Paramter with Methods)

现象:对象调用某个函数,并将所得结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数
动机:如果函数可以通过其他途径获得参数,就不应该通过参数取得该值
做法:让参数接受者去除该项参数,并直接调用前一个函数

引入参数对象(Introduce Paramter Object)

现象:某些参数总是很自然的同时出现
动机:缩短参数列
做法:以一个对象取代这些参数

移除设值函数(Remove Setting Method)

现象:类中的某个字段应该在对象创建时被设值,然后就不再改变
动机:明确该字段不可被修改的意图
做法:去掉该字段的所有设值函数

隐藏函数(Hide Method)

现象:一个函数从来没被其他类用到
动机:降低可见度,提高类的封装性
做法:将这个函数修改为private

以工厂函数取代构造函数(Replace Constructor with Factory Method)

现象:你希望在创建对象时不仅仅是做简单的建构工作
动机:工厂方法能够在构造函数的基础上增加许多功能,且通过方法名就知道意图
做法:将构造函数替换为工厂方法

封装向下转型(Encapsulate Downcast)

现象:某个函数返回的对象,需要由函数调用者执行向下转型
动机:向下转型的动作职责应由方法提供者承担
做法:将向下转型动作移到函数中

以异常取代错误码(Replace Error Code with Exception)

现象:某个函数返回特定的代码用来表示某种错误情况
动机:异常相比于错误码更加严谨
做法:改用异常

以测试取代异常(Replace Exception with Test)

现象:面对调用者可以预先检查的条件,程序抛出了一个异常
动机:异常不能被滥用,只应用来处理罕见的情况
做法:修改调用者,使他在调用函数之前先做检查

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值