代码的坏味道(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等等。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值