重构 - 简化方法的调用

Rename Method

方法名是对方法体的抽象,是化繁为简的支柱

Add Parameter

注意:在添加参数的时候,先考虑是否可以把数据移动到方法所在的类中

Remove Parameter

Separate Query from Modifier

目标:查询的方法不要做修改

Parameterize Method

Replace Parameter with Explicit Methods

现象:一个方法被分成几部分,参数值决定要执行哪个部分;

改进:把这个方法替换成多个方法,每个方法代表原方法的一部分

Preserve Whole Object

Replace Parameter with Method Call

现象: 方法的参数来自于对另一个方法的调用结果

改进:考虑直接把调用挪到方法之内

原则:最短路径-接近用户

Introduce Parameter Object

现象:多个方法的参数列表部分或全部相同

改进:把参数包装成对象

好处:可以把对参数处理的相同逻辑移动到这个对象之内,从而减少代码的重复

原则:内聚

Remove Setting Method

对象的属性值只应该在构造方法里设置,set 方法破坏对象的封装。

Hide Method

方法应尽量私有化

Replace Constructor with Factory Method

把对构造方法的依赖-也就是对具体的类的依赖抽象化,只依赖于一个类。这样对具体的类的创建由这个类提供的方法决定

Replace Error Code with Exception

使用异常机制而不是返回特殊值来表示异常状况。

Replace Exception with Test

现象:使用 try/catch 捕捉某种异常后,返回一个值。

问题:如果清楚异常触发的条件,那应该用if语句过滤这种条件。

好处:返回相同的结果,但避免被调用的方法执行。

时间: 2024-10-06 00:54:25

重构 - 简化方法的调用的相关文章

重构——抽取方法

到处都是重复的代码?方法体又臭又长看不懂?快来试试抽取方法(Extract Method)吧,保证药到病除! 何为抽取方法 将重复的代码或语义独立的代码抽取成一个方法 看好了: Tom抓Jerry(又臭又长版) class Tom { /** * Tom当前的位置 **/ private int curPos; public void catchJerry() { //只要没抓到Jerry就一直抓 while(true) { //找Jerry //左看看 int posOfJerry = loo

c#类的方法表的建立和方法的调用

对于方法的调用,很是令我头疼,什么静态方法,实例方法,实例虚方法,这里查了很多资料,总结如下: 这里声明,我也是菜鸟,这里只讨论方法的调用相关的技术,属于个人理解,如有错误,请指正 思路: 1 clr在加载类型的过程中方法表是怎么样构建的? 2 在程序调用方法时是怎样确定使用哪个类型的方法表的? 3 在程序调用方法时是怎样确定方法在方法表中的位置的(位于方法表的第几个方法)? 一 .方法在方法表中的排列顺序: 继承的实例虚方法.实例虚方法.构造函数.静态方法.实例方法 方法表排列原则: 1 在类

字符串的属性和方法的调用

一.属性: 要确定一个字符串的长度,可以使用字符串的length属性.比如,要得到字符串s的长度: s.length 二.方法: 除了length属性,字符串还提供了许多方法供调用: var s = "hello, world"; s.charAt(0); //“h”:第一个字符. 等价于s[0] s.charAt(s.length-1); //“d”:最后一个字符. 等价于s[s.length-1] s.substring(1,4); //"ell":第2~4个字

笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <filter>     <filter-name>struts2</filter-name>     <filter-class>org.apache.struts2.di

[iOS]为什么不要在init初始化方法里调用self.view

首先.如果你调用self.view的时候,就会调用view的getter方法, 这个时候,view是空的,那么系统就会自动给你创建一个view,然后就会触发ViewDidLoad方法.那么这个时候,如果你init方法里有数组初始化.但是你还没走到那步,而直接就给数组赋值了,那么这个值赋值给了一个不存在的数组.这样就容易出现错误.所以,尽量不要在init方法里写可视化控件的语句. 附1: UIViewController的生命周期: 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1

C# 方法 虚方法的调用浅谈 引用kdalan的博文

我们在面试中经常碰到有关多态的问题,之前我也一直被此类问题所困扰,闹不清到底执行哪个方法. 先给出一道简单的面试题,大家猜猜看,输出是? public class A    {        public void MethodF()         {             Console.WriteLine("A.F");         }        public virtual void MethodG()         {             Console.Wr

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"

iOS 捕获未知方法的调用,避勉抛出异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. NSObject 对象是 Objecitve-C 中的根类,其有以下两个方法,在调用 NSObject 及其子类的方法不存在时,会将这个调用封装成