代码的坏味道就像病人的病状一样,知道了病状,就可以对症下药。文中的重构手法在书中都可以找到。
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等等。
分享到:
相关推荐
于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...
附件是在读完《重构 改善既有代码的设计》之后,为代码的坏味道所撰写的总结文档。
第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 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
第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 ...
第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 章代码的坏味道....咖························· · ···· ·· · ···· ····· · · ·········· ······· ····················· ...
重构原则 代码的坏味道 简化函数调用 重构,复用与现实 重构工具
第3章Kent Beck介绍如何嗅出代码中的【坏昧道】,以及如何运用重构清除这些坏味道。「测试」在重构中扮演非常重要的角色,第4章介绍如何运用一个简单的(源码开放的)Java测试框架,在代码中构筑测试环境。 本书的...
章节三 代码的坏味道 章节四 构筑测试体系 章节五 重构名录 章节六 重新组织你的函数 章节七 在对象之间搬移特性 章节八 重新组织数据 章节九 简化条件表达式 章节十 简化函数调用 章节十一 处理概括关系 章节十二 ...
第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 章:重新组织你的...