`
magicxin
  • 浏览: 16888 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

代码的坏味道(2)—重构改善代码的既有设计

阅读更多

代码的坏味道就像病人的病状一样,知道了病状,就可以对症下药。文中的重构手法在书中都可以找到。

Duplicated Code

1、同一个类的两个函数含有相同的表达式。重构手法:Extract Method

2、两个互为兄弟的子类内含相同的表达式。重构手法:Extract Method+Pull Up Method或Extract Method+Form Template Method/Substitute Algorithm

3、两个毫不相关的类出现重复代码。重构手法:Extract Class

Long Method

程序愈长愈难理解。我们应该积极地分解函数。可以将过长函数分割成几个小函数,好处就在于解释能力、共享能力、选择能力。遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名。重构手法:Extract Method(用于提炼函数)、Replace Temp with Query(用于消除临时变量)、Introduce Parameter Object(用于消除过长的参数)、Preserve Whole Object(为了获取对象的属性方便)、Decompose Conditional(用于分解条件表达式)

Large Class

单个类做太多事情,就会出现太多实例变量,太多的代码,那么Duplicated Code 就自然而然的来了。重构手法:Extract Subclass、Extract Class、Extract Interface

Long Parameter List

太长的参数列难以理解,太多参数会造成前后不一致、不易使用,而且一旦你需要更多数据,就不得不修改它。重构手法:Replace Parameter with Method(将参数用查询方法代替)、Preserve Whole Object、Introduce Parameter Object

Feature Envy(依恋情结)

对象:将数据和对数据的操作行为包装在一起。函数对某个类的兴趣高过对自己所处类的兴趣,一个很明显的例子,某个函数为了计算某个值,从另一个对象那里调用了几乎半打的取值函数,这就是依恋情结。重构手法:Extract Method(提炼函数)+Move Method(移到合适的函数中)

Primitive Obsession

要习惯在小任务上使用对象,如结合数值和币种的money类、由一个起始值和一个结束值组成的range类等。重构手法:Replace Data Value with Object、Replace Type Code with Subclass/Repace Type Code with State/Strategy(替换类型码)

Switch Statements

switch语句的问题就在于重复。面向对象程序可以用多态来优雅地解决以前switch的代码。一看到switch语句,就该考虑是否可以使用多态来替换它。重构方法:Extract Method+Move Method+Replace Type Code with Subclasses/Replace Type Code with State/Strategy+Replace Conditional with Polymorphism(多态)、Replace Parameter with Explicit Methods(使用明确函数取代参数)+Introduce Null Object(不用多态)

Temporary Field

类内有某个实例变量仅为某种特定情况而设,如类中有一个复杂算法,需要好几个变量,为了不传递一长串参数而出现的针对该算法的Temporary Field。重构手法:Extract Class、Intoroduce Null Object。

Middle Man

封装——对外部世界隐藏其内部细节。封装往往会伴随着委托。但过度地委托是不利的。如果某个类一半的函数都委托给另一个函数,这时候就表示过度委托。重构手法:Remove Middle Man、InlineMethod(放进调用端)、Replace Delegation with Inheritance

以上就是我感兴趣的部分。其实还有很多坏味道呢,如Divergent Change、Shotgun Surgery、Data Clumps、Parallel InheritanceHierarchies、Data Class等等。

 

分享到:
评论

相关推荐

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

    于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...

    《重构 改善既有代码的设计》之代码的坏味道

    附件是在读完《重构 改善既有代码的设计》之后,为代码的坏味道所撰写的总结文档。

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

    第3章 代码的坏味道 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...

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

    重构-改善既有代码的设计+中文版代码重构 代码的新思维 何为优秀代码 代码的坏味道 如何重构 设计重构 设计的基本原理 重构到模式 架构重构

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

    第3章 代码的坏味道 75 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(发散式...

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

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

    重构-改善既有代码的设计之代码的坏味道举例说明.md

    重构-改善既有代码的设计之代码的坏味道举例说明.md

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

    第3章 代码的坏味道 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章 代码的坏味道75 3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ...

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

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

    重构_改善既有代码的设计[高清版]【已进行内容识别处理,可搜索,可编辑+有目录】

    第3 章代码的坏味道....咖························· · ···· ·· · ···· ····· · · ·········· ······· ····················· ...

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

    重构原则 代码的坏味道 简化函数调用 重构,复用与现实 重构工具

    程序员该读的十本好书之《重构改善既有代码的设计》

    第3章Kent Beck介绍如何嗅出代码中的【坏昧道】,以及如何运用重构清除这些坏味道。「测试」在重构中扮演非常重要的角色,第4章介绍如何运用一个简单的(源码开放的)Java测试框架,在代码中构筑测试环境。 本书的...

    重构-改善既有代码的设计(chm清晰版)

    章节三 代码的坏味道 章节四 构筑测试体系 章节五 重构名录 章节六 重新组织你的函数 章节七 在对象之间搬移特性 章节八 重新组织数据 章节九 简化条件表达式 章节十 简化函数调用 章节十一 处理概括关系 章节十二 ...

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

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

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

    重构--改善既有代码的设计_中文版 这是一本非常经典的软件工程类书籍,指导我们如何有效的重构代码,如何察觉到代码的坏味道,并且用有效的手段重构它。

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

    3、代码的坏味道(BadSmellsinCode) 4、建立测试体系(BuildingTests) 5、重构名录(CatalogofRefactoring) 6、重构方法(Refactoring Method) 6、1重新组织你的函数(ComposingMethods) 6、2在...

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

    第 3 章:代码的坏味道(Bad Smells in Code, by Kent Beck and Martin Fowler) 第 4 章:建立测试体系(Building Tests) 第 5 章:重构名录(Toward a Catalog of Refactoring) 第 6 章:重新组织你的...

Global site tag (gtag.js) - Google Analytics