重构手法(二)之简化函数调用

1、Rename Method(函数改名)

2、Add Parameter(添加参数)

3、Remove Parameter(移除参数)

4、Separate Query form Modifier(将查询参数和修改参数分离)

5、Parameterize Method(令函数携带参数)

6、Replace Parameter with Explicit Methods(以明确函数取代参数)

7、Preserve Whole Object(保持对象完整)

8、Replace Parameter with Methods(以函数取代参数)

9、Introduce Parameter Object(引入参数对象)

10、Remove Setting Method(移除设置函数)

11、Hide Method(隐藏函数)

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

13、Encapsulate Downcast(封装向下转型)

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

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

时间: 2024-10-25 21:07:15

重构手法(二)之简化函数调用的相关文章

[代码重构]简化函数调用

在对象技术中,最重要的概念莫过于“接口”,容易被理解和被使用的接口是开发良好面向对象软件的关键.本章介绍的重构手法是用来使接口变得更简洁易用的. 简化函数调用 1. 重构手法 1.1 函数改名 概要: 函数的名称未能揭示函数的用途. 修改函数名称. 动机: a. 让函数名称准确表达它的用途 示例: 重构前: public String getTelephoneNumber() { return mOfficeAreaCode + "-" +mOfficeNumber; } 重构后: /

重构摘要10_简化函数调用

<重构-改善既有代码的设计>Martin Fowler 摘要: 第十章 简化函数调用 Rename Method 函数改名 改一个自表达的名字吧!骚年 Add Parameter 添加参数 某个函数需要从调用端得到更多信息. 为此函数添加一个对象参数,让该对象代价函数所需信息.并发编程大多数参数很长,不放在一个类中,因为这样你可以保证传递给函数的参数都是不可修改的. Remove Parameter 移除参数 移除不必要的某个参数 Separate Query from Modifier 将查

说说什么是重构(二)重构的过程

序 上一篇文章主要是说了说什么是重构,重构都在什么情况下开始.而这篇文章,则主要是讲讲重构的过程中,需要注意哪些东东.还有就是如何进行重构. 背景 说到底,重构无非就是为了让代码更加优雅,更加简练,更加高效.重构的结果就是找到一个平衡点,使得项目不仅能够稳定的运行,还能够很容易的被程序员理解,以至维护起来不用那么辛苦.那么,下面就说说重构过程中应该注意哪些事项,以及如何进行重构. 建立测试体系 如果你想进行重构,首要前提就是要有一个稳定.可靠的测试环境.作为开发人员,大部分的时间不是消耗在编写代

重构改善既有代码设计--重构手法04:Replace Temp with Query (以查询取代临时变量)

所谓的以查询取代临时变量:就是当你的程序以一个临时变量保存某一个表达式的运算效果.将这个表达式提炼到一个独立函数中.将这个临时变量的所有引用点替换为对新函数的调用.此后,新函数就可以被其他函数调用. 例子如下: double basePrice = _quantity*_itemPrice; if (basePrice > 1000) { return basePrice * 0.95; } else { return basePrice * 0.98; } 重构之后代码: if (BasePr

重构改善既有代码设计--重构手法01:Extract Method (提炼函数)

背景: 你有一段代码可以被组织在一起并独立出来.将这段代码放进一个独立函数,并让函数名称解释该函数的用途. void PrintOwing(double amount) { PrintBanner(); //print details Console.WriteLine("name:"+_name); Console.WriteLine("amount:"+_amount); } void PrintOwing(double amount) { PrintBanne

重构手法

重构手法1.0 Extract Method 提炼函数:你有一段代码可以被组织在一起并独立出来.做法:将这段代码放进一个独立函数中,并让函数名称解释该函数的用途.2.0 Inline Method 内联函数:一个函数的本体与名称同样清楚易懂.做法:在函数调用点插入函数本体,然后移除该函数.3.0 Inline Temp 内联临时变量:你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法.做法:将所有对该变量的引用动作,替换为对它赋值的那个表达式自身.4.0 Replace Tem

重构改善既有代码设计--重构手法16:Introduce Foreign Method (引入外加函数)&amp;&amp; 重构手法17:Introduce Local Extension (引入本地扩展)

重构手法16:Introduce Foreign Method (引入外加函数)你需要为提供服务的类增加一个函数,但你无法修改这个类.在客户类中建立一个函数,并以第一参数形式传入一个服务类实例. 动机:这种事情发生了太多次了,你正在使用一个类,它真的很好,为你提供了需要的所有服务.而后,你又需要一项新服务,这个类却无法供应.于是你开始咒骂“为什么不能做这件事?”如果可以修改源码,你便可以自行添加一个新函数:如果不能,你就得在客户端编码,补足你要的那个函数. 如果客户类只使用这项功能一次,那么额外

重构改善既有代码设计--重构手法19:Replace Data Value with Object (以对象取代数据值)

你有一笔数据项(data item),需要额外的数据和行为. 将这笔数据项变成一个对象. class Order... private string customer; ==> class Order... private Customer _customer; class Customer... private string _name; 动机 一开始你可能会用一个字符串来表示[电话号码]概念,但是随后你就会发现,电话号码需要[格式化].[抽取区号]之类的特殊行为.当这些臭味开始出现,你就应该

重构改善既有代码设计--重构手法 之重新组织你的函数总结

前面讲了那么多的重构手法,估计学完后都会忘记,因此暂停下脚本,总结下,其实前面的所有重构手段,围绕一个主题:函数.即对函数的优化:为此首先一个函数里面代码很长,那么此时我们要做的就是提炼函数. 提炼函数的过程中,我们会产生新的函数,这个时候最重要的就是,是否有变量的引用,如果没有,那么这个函数很好提炼:如果有,那么就看是否会在子函数或者说新拆的函数中会对其赋值操作,如果没有赋值操作,那么也很简单,那么就直接将这个变量以参数的形式传入进去.那么最麻烦的就是,在拆出来的函数中会引用到原函数中的变量:

重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)

你有一个大型函数,其中对局部变量的使用,使你无法釆用 Extract Method. 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field) 然后你可以在同一个对象中将这个大型函数分解为数个小型函数. class Order... double price() { double primaryBasePrice; double secondaryBasePrice; double tertiaryBasePrice; // long computation; ... }