摘抄自:http://blog.csdn.net/bulinner/archive/2006/05/01/699384.aspx
一、代码坏味道(Bad Smell in Codes)及其重构策略
1.尽量消除重复的代码,将它们合而为一
根据重复的代码出现在不同的地方,分别采取不同的重构的策略:
(1) 在同一个Class的不同地方:通过采用重构工具提供的Extract Method功能提炼出重复的代码, 然后在这些地方调用上述提炼出方法。
(2) 在不同Subclasses中:通过Extract Method提炼出重复的代码,然后通过Pull Up Method将该方法移动到上级的Super class内。
(3) 在没有关系的Classes中:通过对其中一个使用Extract Class将重复的代码提炼到一个新类中,然后在另一个Class中调用生成的新类,消除重复的代码。
举例(1):
Class Student
{
String sname;
String
}
2.拆解过长的函数
过长的函数在我们的日常代码中经常可见,在C#中常通过#region #endregion区隔为不同的功能区域。
重构策略:通过Extract Method将过长的函数按照功能的不同进行适当拆解为小的函数,并且给这些小函数一个好名字。通过名字来了解函数提供的功能,提高代码的理解性。
3.拆解过大的类
过大的类也经常见到,特别是类中含有大量的成员变量。
重构策略:通过Extract Class将一些相关成员变量移植到新的Class中,如Employee类,一般会包含有联系方式的相关属性(电话, Mobile,地址,Zip等等),则可以将这些移植到新的EmployeeContact类中。
4.过长的参数列
过长的参数列的主要问题是难以理解,并且难以维护。如果要增加新的参数或者删除某一参数,易造成参数前后不一致。
重构策略:如果可以通过向已存在的对象查询获取参数,则可通过Replace Parameter with Method,移除参数列,通过在函数内部向上述已存在的对象查询来获取参数。
如果参数列中若干参数是已存在对象的属性,则可通过Preserve Whole Object将这些参赛替换为一个完整对象,这样不仅提高代码的可读性,同时已易于代码今后的维护。
另外,还可以将若干不相关的参数,使用Introduce Parameter Object来创建一个新的参数类。不过,我个人觉得如果这些情况过多的话,会产生很多莫名其妙的参数类了,反而降低代码的可读性。
个人觉得前面4种坏味道比较显而易见,也比较容易处理。
分享到:
相关推荐
#### 常用重构方法 重构方法众多,这里列举几种常用的方法: 1. **提取函数(Extract Method)**:将一段代码抽取成独立的函数,增强代码的复用性和可读性。 2. **内联函数(Inline Method)**:将一个函数调用...
在标题“压缩感知重构方法”中,重点在于如何利用这种理论来高效重建一维信号。 在压缩感知中,关键在于信号的稀疏性。如果一个信号在某种基或变换域中可以被表示为少数非零系数,那么我们称这个信号是稀疏的。例如...
【测量噪声条件下基于扩展变量和最佳平方逼近的重构方法的研究】是关于复杂网络重构技术的一篇研究论文,由翁平、李汉鹏、史润东和王世红等人撰写。该研究关注的重点在于如何在存在测量噪声的情况下,利用扩展变量和...
"基于人工神经网络的WENO重构方法" 本文提出了一种基于人工神经网络的WENO重构方法,用于解决流体力学中的某些初边界值问题(IBVP)。在这种方法中,人工神经网络(ANN)被用于近似WENO-JS中的非线性权重,其中ANN的...
一种常用的方法是基于最小化L1范数的优化问题,如公式(2)所示,即寻找使得y=Φs成立的同时,s的L1范数最小的解。这种方法能够有效地找到信号的稀疏表示。 文中还提到,梯度算法(GP)是重构算法的基础,但存在一定...
常用的基包括小波基、傅立叶基或蝶形滤波器基。 3. **重构算法**:选择合适的重构算法来求解稀疏表示。例如,可以使用`l1_min`函数实现L1最小化,`lasso`函数用于LASSO回归,或者使用`omp`函数实现匹配追踪。 4. *...
针对这一点,本研究提出了一种新的配网重构方法,这种新方法充分考虑了节点电压对分布式电源无功出力的影响,并根据节点电压能够确定不同属性的分布式电源无功出力。 为了实现配网的优化重构,本研究采用了自适应...
基于BP神经网络的堆芯三维功率重构方法研究 本文主要研究基于BP神经网络的堆芯三维功率重构方法,以解决堆芯功率分布的测量问题。该方法通过使用BP神经网络对堆外中子探测器的测量数据进行处理和分析,从而重构堆芯...
"相空间重构Cao"则可能是一种特别的相空间重构方法,由作者Cao提出。在"cao_m.m"文件中,我们期望找到的是一个MATLAB函数,用于执行这个特定的重构过程。该函数可能包含了嵌入向量的构造、距离矩阵的计算、延时时间...
这里,我们关注的是三种不同的重构方法:基于卷积(CONV)的重构、基于 Fresnel 变换的重构(Fresnel_diff)和角谱法(Angular_spectrum)。这些方法都是为了从数字全息图中恢复原始光场信息。 1. **基于卷积的重构...
这是重构中最基础也是最常用的技术之一。 2. **重命名变量和方法**:选择更具有描述性的名称,可以使代码的意图更加明确,提高代码的可读性。 3. **提取类和接口**:当一个类承担了过多的责任时,可以考虑将其...
FOCUSS(Focused Iterative Spherical Undersampling and Reconstruction Sequence)算法就是一种常用的稀疏重构方法。 FOCUSS算法由Gelb在2002年提出,主要用于图像重建和医学成像等领域。它基于迭代最小化策略,...
下面介绍几种常用的Python重构工具: 1. **Rope**:一个专为Python设计的重构库,支持诸如重命名、提取方法、移动代码等常见重构操作。Rope可以集成到各种IDE和编辑器中,如PyCharm、Vim等,极大地提高了重构的灵活...
【火箭壳体加工的虚拟单元重构方法】 火箭壳体加工是一项复杂的制造任务,涉及到精确的工艺规划和设备调度。在实际生产中,由于新订单的不断到来,车间的排产方案需要频繁调整,这可能导致重构时间增加,效率降低。...
2. **延迟坐标法**:这是相空间重构的一种常用方法,也称为Takens嵌入定理。它通过引入时间延迟来创建新的观测向量,比如用当前值和过去若干时刻的值来构成一个新的“伪”状态向量,从而逼近真实相空间。 3. **...
**3.2 常用重构工具** - **IntelliJ IDEA**:提供丰富的重构选项,如提取方法、内联变量等。 - **Eclipse**:支持多种重构操作,并可通过插件扩展更多功能。 - **Visual Studio Code**:虽然轻量级,但通过安装插件...
这种方法在ORL人脸数据集上进行了实验,ORL数据集包含了多角度、光照条件变化的人脸图像,是常用的人脸识别测试集合。实验结果表明,融合图像分块重构和LDA能够有效地克服光照变化、姿态变化等问题,提升识别性能。...
本文研究了基于布里渊分布式光纤传感技术来实现固定式储液罐薄壳壁结构变形场的可视化重构方法。储液罐作为工业中常用的存储设备,其结构安全至关重要。而传统检测方法往往不能精确地监测到储液罐的实时变形情况,...