重构——44移除参数(Remove Parameter)

移除参数(Remove Parameter)

函数本体不再需要某个函数;将该参数去除

一、动机

不去掉多余的参数,就让用户多费一份心

二、做法

1、检查函数签名是否被超类或者子类实现,如果是,则需要针对每份实现分别进行下列步骤

2、声明一个新函数,名称与原函数相同,只是去除不必要的参数。将旧函数代码复制到新函数中

3、编译

4、修改旧函数,令它调用新函数

5、编译,测试

6、找出旧函数所有的引用点,将它们全部修改为对新函数的引用。每次修改后,编译并测试删除旧函数,或者deprecated

7、编译,测试

时间: 2024-09-20 20:27:46

重构——44移除参数(Remove Parameter)的相关文章

重构——7移除对参数的赋值(Remove Assignments to Parameters)

移除对参数的赋值(Remove Assignments to Parameters) 代码对一个参数进行赋值,以一个临时变量取代该参数的位置 一.动机 1.降低了代码的清晰度 2.java只采用按值传递方式,我们的讨论也正是基于这一点 二.做法 1.建立一个临时变量,把待处理的参数值赋予它. 2.以"对参数赋值"为界,将其后的所有对此参数的引用点,全部替换为对此临时变量的引用 3.修改赋值语句,使其对新建之临时变量赋值 4.编译,测试

重构——15移除中间人(Remove Middle Man)

移除中间人(Remove Middle Man) 某个类做了过多的简单委托动作:让客户直接调用受托类 一.动机 1.封装委托对象有代价,每当客户要使用委托类的新特征是,你就必须在服务器端添加一个简单的委托函数 2.尺度很难拿捏,重构的意义就在于:你永远不必说对不起,只要把出问题的地方修补好就行了 二.做法 1.建立一个函数,用以获得受托对象 2.对于每个委托函数,在服务类中删除该函数,并让需要调用该函数的客户转为调用受托对象 3.处理每个委托函数后,编译.测试

重构——37移除控制标记(Remove Control Flag)

移除控制标记(Remove Control Flag) 在一系列表达式中,某个变量带有"控制标记作用":以break语句或者return语句取代控制标记 一.动机 单一出口的原则会大大降低代码的可读性 二.做法 1.找出让你跳出这段程序的控制标记值 2.找出对标记变量赋值的语句,代以恰当的break语句或continue语句 3.每次替换后,编译并测试 4.在未能提供break和continue的编程语言中 5.使用Extract Method,恰当的return

重构——51移除设值函数(Remove Setting Method)

移除设值函数(Remove Setting Method) 类中的某个字段应该在对象创建时被设值,然后就不再改变:去掉该字段的所有设值函数 一.动机 不希望对象被改变,就不要提供设值函数,同时final之 二.做法 1.检查设值函数被使用的情况,看它是否只被构造函数调用,或者被构造函数所调用的另一个函数调用 2.修改构造函数,使其直接访问设值函数所针对的那个变量 3.编译,测试 4.移除这个设值函数,将它所针对的字段设置为final 5.编译,测试

ORACLE推导参数Derived Parameter介绍

Oracle的推导参数(Derived Parameters)其实是初始化参数的一种.推导参数值通常来自于其它参数的运算,依赖其它参数计算得出.官方文档关于推导参数(Derived Parameters)的概念如下:   Derived Parameters Some initialization parameters are derived, meaning that their values are calculated from the values of other parameters

Scala学习:叫名参数by-name parameter

上节展示的withPrintWriter方法不同于语言的内建控制结构,如if和while,在于大括号之间的代码 带了参数.withPrintWriter方法需要一个类型为PrintWriter的参数.这个参数以"writer =>"方 式显示出来: withPrintWriter(file) { writer => writer.println(new java.util.Date) } 然而如果你想要实现某些更像if或while的东西,根本没有值要传入大括号之间的代码,那

重构——49以函数取代参数(Replace Parameter with Methods)

以函数取代参数(Replace Parameter with Methods) 对象调用某个参数,并将结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数:让参数接受者去除该项参数,并直接调用前一个参数 一.动机 如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值 二.做法 1.如果有必要,将参数的计算过程提炼到一个独立的函数中 2.将函数本体内引用该参数的地方改为调用新建的函数 3.每次替换后,编译并测试 4.全部替换完成后,使用Remove Parame

重构——50引入参数对象(Introduce Parameter Object)

引入参数对象(Introduce Parameter Object) Range模式:某些参数总是很自然的同时出现:以一个对象取代这些参数 一.动机 1.碰到数据泥团,我们可以运用一个对象包装这些数据,那怕只是为了把这些数据组织在一起,这样做也是值得的 2.可以把这些参数的共同处理移到新对象中,减少重复代码 二.做法 1.新建一个类,用以表现你想替换的一组参数,将这个类设为不可变的 2.编译 3.针对使用改组参数的所有函数,实施Add Parameter,传入上述新建类的实例对象,并将此参数值设

PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用_php技巧

思维导图 介绍 前几篇系列文章,我比较关注的是<PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数>,但是我觉得我还是没有说清楚,我自己也有很多不理解的地方,而且这篇是我的第一篇这方面的文章,有很多的纰漏,所以我会经常性的去做修改,如果大家有好的意见不妨告知一.二. 今天谈得是"接口",此接口非"Interface",而是一个统称.我们一般可以把供别人使用的函数或者url(一般是用于提供数据)叫接口.--可能还有别的意思,毕竟我现