`

重构 - 组合方法 -- 提取方法

阅读更多

提取方法:

当你有一段可以被组织起来的代码片段。

将这段代码放进一个本身的名字就可以很好的解释方法用途的方法里。

 

void printOwing(double amount) {
    printBanner();
 
    //print details
    System.out.println ("name:" + _name);
    System.out.println ("amount" + amount);
}

||

\/

 

void printOwing(double amount) {
    printBanner();
    printDetails(amount);
}
 
void printDetails (double amount) {
    System.out.println ("name:" + _name);
    System.out.println ("amount" + amount);
}

 

目的:

 

提取方法是我最常用的重构之一。 我研究那些太长或者需要注释才能被理解的代码。 然后我把那种代码片段变成一个方法。

 

有多个原因使我倾向于简短,良好命名的方法。首先, 当方法的力粒度很小的时候就增加了它被其他方法重用的机会。 其次,它使得阅读更高级的方法就像在阅读一系列的注释一样。 当方法的粒度很小的时候, 重写也变的更容易。

 

It does take a little getting used to if you are used to seeing larger methods. And small methods really work only when you have good names, so you need to pay attention to naming. People sometimes ask me what length I look for in a method. To me length is not the issue. The key is the semantic distance between the method name and the method body. If extracting improves clarity, do it, even if the name is longer than the code you have extracted.

你确实需要一点时间去习惯如果你习惯于见到大方法。小方法只有在良好命名的情况下才起作用,所以你需要注意方法的命名。人们有时候会问我方法应该要多长。 对于我来说长度不是一个问题。关键是方法名和方法体之间的语义距离。如果提取能够使得方法更清晰, 提取它, 哪怕在提取之后方法名比方法体还要长。

 

过程:

 

 

  • 新建一个方法, 按照方法的目的进行命名(根据它做什么来命名, 而不是它如何工作)。
    如果有想要提取的代码非常简单, 比如一个简单的消息或者功能调用,如果新的方法可以更好地展现代码的意 图你也应该提取这个方法。 如果你不能够找出一个更有意义的名字, 那就不要提取代码
  • 从原方法中复制提取的代码到心的方法中。

....................

分享到:
评论

相关推荐

    重构-改善既有代码的设计+中文版

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining ...

    重构-改善既有代码的设计(中文版)

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining ...

    重构_改善既有代码的设计[高清版]中文版

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce ...

    重构与模式.[美]Joshua Kerievsky(带详细书签).pdf

    本书不仅展示了一种应用模式和重构的创新方法,而且有助于读者结合实战深入理解重构和模式。书中讲述了27种重构方式。 本书适于面向对象软件开发人员阅读,也可作为高校计算机专业、软件工程专业师生的参考读物。 ...

    重构 改善既有代码的设计

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce ...

    重构——改善既有代码的设计

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce Explaining ...

    重构,改善既有代码的设计

    Chapter 6:Composing Methods 组合方法   Extract Method 提取方法   Inline Method 内联方法   Inline Temp 内联临时变量   *Replace Temp with Query 用查询方法代替临时变量   Introduce ...

    MFE-LASSO方法的matlab代码.zip

    生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、...

    基于相空间重构和模糊聚类的电动机故障诊断方法

    根据笼型异步电动机断条故障的基本规律及相空间重构和模糊聚类的物理意义,利用相空间重构把非线性时间序列重构成低阶非线性系统的组合,对三相电流信号进行分析、提取信号特征,对重构后的电流轨迹进行辨识和定量分析,...

    IOI国家集训队论文集1999-2019

    * [组合数学](#组合数学) + [计数与统计](#计数与统计) + [数位问题](#数位问题) + [动态统计](#动态统计) + [博弈](#博弈) + [母函数](#母函数) + [拟阵](#拟阵) + [线性规划](#线性规划) + [置换群](#...

    基于参数优化的EEMD-LSSVM年径流组合预测模型 (2013年)

    基于分解-重构原则,论文首先利用总体经验模式分解法对径流系列进行周期分量提取,然后应用基于参数寻优的LSSVM模型对各分量进行预测和重构。以澧水流域江垭站的年径流预测为例进行模型检验,通过三种预测模型的结果...

    DSP中的一种新型高斯噪声组合滤波方法

    摘要:为了有效滤除图像中的高斯噪声,提出了一种组合滤波方法。该方法首先将含有高斯噪声的图像进行维纳滤波预处理以滤除部分噪声干扰,然后将图像进行二维小波分解,得到高频和低频分解系数,保持低频分解系数不变...

    基于改进WGAN-GP的多波段图像同步超分与融合方法

    其次,将该放大结果输入特征提取(编码)网络分别提取特征并在高层特征空间进行组合;然后,通过解码网络重构出初步融合图像;最后,经过生成器和判别器的动态博弈得到高分辨率的融合图像。实验结果表明,所提方法不仅可以...

    网站设计分析:模块化–高效重构

    说起模块化,也许我们首先想到的是编程中的模块设计,以功能块为单位进行程序设计,最后通过模块的选择和组合构成最终产品。把这种思想运用到页面构建中,也已经不是什么新鲜事。相信很大一部分页面构建工程师都经历...

    training-java-advanced-201801

    培训Java基础知识Sesi 1 ...为什么,何时,何地,如何进行重构准备/先决条件识别代码中的不良气味重构力学Sesi 8恶臭重复码长方法/类长参数列表弹枪手术功能羡慕注释Sesi 9重构力学提取/内联方法临时变量:内联,拆分

    基于非结构数据流行学习的碳价格多尺度组合预测

    对此,提出一种基于非结构数据流行学习的碳价格多尺度组合预测方法.首先,利用网络搜索指数提取碳价格相关的非结构化数据,基于等度量映射流行学习对其进行降维;然后,对降维后的非结构化数据、其他影响因素结构化数据、...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    基于广义映射原理的组合夹具结构设计自动化 (2000年)

    在对零件夹持特性分析基础上,提取夹具设计需求,并对组合夹具功一构映射关系进行全面分析,对组合夹具概念结构实施多方案重构,并进行了实例验证。为夹具结构设计自动化软件系统的开发探索出一条新的途径。

    背景分离matlab代码-Multi-band-ICA-for-EEG-and-MEG:多频带ICA是滤波器组,PCA和ICA的组合,以便在E

    多频带ICA是滤波器组,PCA和ICA的组合,用于在EEG(和MEG)中去除伪影和提取成分。 传统的宽带ICA只能找到最强的源,而较弱的源中的数据并不总是可以恢复的。 在分离性能,提取成分的数量和重构源的质量方面,多频带...

Global site tag (gtag.js) - Google Analytics