`
阅读更多
重复代码的影响:程序中到处都是相同结构的表达式。若想修改此表达式,需要修改多个地方。
目标:相同表达式合并成一起,避免多处修改。降低修改成本。
常见以下几种:
1、同一个类有相同的表达式
2、两个类有相同表达式
3、两个子类有相同的表达式
4、两个不相干的类含有相同表达式

重复代码解决方法如下:

重复代码定义:不同的地方出现相同的程序结构:

    如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们和而为一,程序会变得更好。最常见的“重复代码”就是一个类内的两个函数含有相同的表达式。另一种常见情况就是两个互为兄弟的子类内含有相同的表达式。
  1)同一个类的2个函数含有相同的表达式,这时可以采用Extract Method(提炼函数)提炼出重复的代码,然后让这2个地点都调用被提炼出来的那段代码。
  2)两个互为兄弟的子类内含相同表达式,只需对2个类都是用Extract Method(提炼函数),然后对被提炼出来的函数是用Pull Up Method (方法上移) ,将它推入超类。如果代码之间只是类似, 并非完全相同,那么就得运用Extract Method(提炼函数 将相似部分和差异部分隔开,构成单独一个的函数。然后你可能发现可以运用Form Template Method (塑造模板函数)获得一个 Template Method设计模式。如果有些函数以不同的算法做相同的事,你可以选择其中较清晰地一个,并是用 Substitute Algorithm (替换算法)将其他函数的算法替换掉。
  如果2个毫不相关的类出现 重复代码,你应该考虑对其中一个运用 Extract Class (提炼类),将重复代码提炼到一个独立类中,然后在另一个类内使用这个新类。但是,重复代码所在的函数可能只应该属于某个类,另一个类只能调用它,抑或这个函数可能属于第三个类,而另2个类应该引用这第三个类。你必须决定这个函数放在哪儿最合适,并确保它被安置后就不会再在其他任何地方出现。


分享到:
评论

相关推荐

    Using Slicing to Identify Duplication in Source Code.pdf

    可以识别交织的重复代码,生成新的函数。 本文具有很好的启发价值。 Programs often have a lot of duplicated code, which makes both understanding and maintenance more di cult. This problem can be ...

    DuplicateLines:揪出万恶的重复代码

    最好在写的时候就消灭重复代码,但总有接手别人的项目的时候 考虑到重复代码经常是 复制 粘贴 导致,所以暂且以 一行 为最小单位,展示出现的次数 根据 Obj-C 的关键字,去除一些重复行 删除 注释行 和 空格 删除...

    重构代码笔记1

    1. 神秘命名(Mysterious Name) 2. 重复代码(Duplicated Code) 3. 过长函数(Long Function)关键在于“做什么

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

     Duplicated Code 重复代码   Long Method 过长方法   Large Class 过长类   Long Parameter List 过长参数列表   Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy ...

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

    3.1 Duplicated Code(重复的代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shortgun Surgery(霰弹式修改) 3.7 ...

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

     Duplicated Code 重复代码   Long Method 过长方法   Large Class 过长类   Long Parameter List 过长参数列表   Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋...

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

     Duplicated Code 重复代码   Long Method 过长方法   Large Class 过长类   Long Parameter List 过长参数列表   Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋...

    重构 改善既有代码的设计

     Duplicated Code 重复代码   Long Method 过长方法   Large Class 过长类   Long Parameter List 过长参数列表   Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy ...

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

     Duplicated Code 重复代码   Long Method 过长方法   Large Class 过长类   Long Parameter List 过长参数列表   Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy ...

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

     Duplicated Code 重复代码   Long Method 过长方法   Large Class 过长类   Long Parameter List 过长参数列表   Divergent Change 发散式变化   Shotgun Surgery 霰弹式修改   Feature Envy 特性依恋...

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

    3.1 Duplicated Code(重复代码) 76 3.2 Long Method(过长函数) 76 3.3 Large Class(过大的类) 78 3.4 Long Parameter List(过长参数列) 78 3.5 Divergent Change(发散式变化) 79 3.6 Shotgun ...

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

    3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 ...

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

    3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 ...

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

    3.1 Duplicated Code(重复的代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shortgun Surgery(霰弹式修改) 3.7 ...

    重构_改善既有代码的设计.pdf

    3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 ...

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

    3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 ...

    用Java语言编写程序最容易犯的21种错误

    1.Duplicated Code  代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy- and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。  2.Long method  它是传统...

    重构:改善既有代码的设计.[美]Martin Fowler.epub【文字版手机格式】

    3.1 Duplicated Code(重复代码) 3.2 Long Method(过长函数) 3.3 Large Class(过大的类) 3.4 Long Parameter List(过长参数列) 3.5 Divergent Change(发散式变化) 3.6 Shotgun Surgery(霰弹式修改) 3.7 ...

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

     3.1 DuplicatedCode(重复代码)76  3.2 LongMethod(过长函数)76  3.3 LargeClass(过大的类)78  3.4 LongParameterList(过长参数列)78  3.5 DivergentChange(发散式变化)79  3.6 ShotgunSurgery...

Global site tag (gtag.js) - Google Analytics