概述
重构一书的代码坏味道
1 Duplicated Code(重复代码)
在同一个类中的不同函数、子类之间或者毫不相干的类之间出现相同的程序结构,都应该设法将他们合二为一。
同一个类中的两个函数含有相同的表达式,提炼重复代码到一个函数中,再让这些地方调用这个函数。
子类之间出现重复代码,把重复代码提炼到父类中。
两个毫不相关的类出现重复,把重复代码提炼到其中一个类中或者一个新的类作为一个方法,让所有的类调用它。
2.Long Method(过长函数)
函数越长越不容易被理解,维护和修改越困难。
每当感觉需要以注释来说明点什么的时候,就把需要说明的东西写进一个独立函数里,并以其用途来命名函数。
3.Large Class(过大的类)
过大类指利用单一class做太多事情,其内就会出现太多的变量,并且重复代码也会出现。
通过提炼类,提炼子类或者超类把过多的相关的变量提炼到新的类中。
4.Long Parameter List(参数列表过长)
过长的参数列表同样难以理解,会造成前后不一致、不宜使用。
很多时候参数,都可以通过请求所属对象来获得,可以去掉。
如果有多个参数来自同一个对象,可以用这个对象当做参数。或者可以把新建一个参数对象,来容纳参数。
5.Divergent Change发散式变化
某个class经常因为不同的原因在不同方法上发生变化,也就是说:一个类拥有多个引起它发生变化的原因。原则上,每个对象只因一种变化而修改。
找出因为某个特定原因造成的所有变化,提炼到一个新的class中。
6.Shotgun Surgery散弹式修改
和5相反,遇到某种变化,都必须修改不同的class以响应之。代码散步四处,很难维护。
把需要修改的代码放进同一个类,或者可以创建一个新类。
7.Feature Envy依赖过于严重
对象技术的全部要点:封装数据和行为
如果一个class的函数对另一个class的依赖(表现为对对象数据和对象函数调用)比这个class还高,就是依赖过于严重。
应该把这个函数移动到一个合适类中,原则上是移到依赖最为严重的类中。
8.Data Clumps 数据泥团
两个classes中出现几个相同值域,或者函数中的相同参数,就是数据泥团
相同值域应该提炼到一个新的class中。
相同参数列可以以新对象代替。
9.Primitive Obsession基本类型偏执
基本类型被过度使用。在某些场合,应该使用较小的类来代替基本类型,比如货币、带范围的数值、电话号码或者邮编字符串等。
10 Switch Statements(Switch惊悚现身)
switch 语句会导致导致代码重复,应该考虑用多态替换它.
11.Parallel Inheritance Hierarchies(平行继承体系)
平行继承体系是霰弹式修改的一个特例。在这种情况下,当你为某个类增加一个子类时,你不得不为另一个类也相应增加一个子类
12.Lazy class(冗赘类)
一个类不值其身价,就是冗赘类.
重构使其消失,去除冗余瘦身也可以吧
13.Speculative Generality(夸夸其谈的未来性)
一个系统的装置,以"将来有一天需要这么做"的考虑而实现了各式各样的hooks和特殊情况来处理一些不必要的事情,就会导致此坏味.比如,过度抽象.
一个装置如果肯定会被用到,那么就值得做;如果用不到,就不值得.
14.Temporary Field(令人迷惑的暂时值域)
对象中某个变量instance仅为某种特定情势而设.这样的代码让人不易理解.
例如一个class有一个复杂算法,需要好几个变量,为了避免过长参数,而把这些变量设置成class值域.
这些变量应该用extract class重构消除.
15.Message Chains(过度耦合的消息链)
如果你看到用户向一个对象request另一个对象,然后再向后后者索求另一个对象,然后再所以另一个对象.......这就是Message Chains.
采取这种方式,意味客户将与查找过程的航行结构紧密耦合,一旦对象间的关系发生任何变化,客户端不得不做出相应修改.
16.Middle Man (中间转手人)
过度运用委托delegation。某个class接口有一半的函数都委托给其他class,这样就是过度运用,导致middle man。
可以使用Remove Middle Man和Replace Delegation with Inheritance重构
17.Inappropriate Intimacy (狎昵关系)
如果看到两个classes过于亲密,花费太多的时间去探究彼此直接的private成分.就是狎昵关系.
18.Alternative Classes with different interface(异曲同工的类)
两个类的函数做着同一件事,却有不同的签名式(signature).
19.Incomplete library Class(不完善的程序库类)
程序库类不完整带来的坏味道
20.Data Class(纯粹的数据类)
一个类除了拥有值域,以及访问这些值域的函数之外,身无长物。
21.Refused Bequest(被拒绝的遗赠)
subclass 应该继承superclass的函数和数据。当subclass不需要继承所有的函数或者数据,就出现了这种坏味道。
22.Comments(过多的注释)
注释过多,说明代码不易被理解。应该先重构前面提到的坏味道,然后代码就说明了功能。
(全部做到真滴有点难。。。)
最后
以上就是真实蜜粉为你收集整理的重构笔记-代码坏味1 Duplicated Code(重复代码)2.Long Method(过长函数)3.Large Class(过大的类)4.Long Parameter List(参数列表过长)5.Divergent Change发散式变化6.Shotgun Surgery散弹式修改7.Feature Envy依赖过于严重8.Data Clumps 数据泥团9.Primitive Obsession基本类型偏执10 Switch Statements(Switch惊悚现身)11.Parall的全部内容,希望文章能够帮你解决重构笔记-代码坏味1 Duplicated Code(重复代码)2.Long Method(过长函数)3.Large Class(过大的类)4.Long Parameter List(参数列表过长)5.Divergent Change发散式变化6.Shotgun Surgery散弹式修改7.Feature Envy依赖过于严重8.Data Clumps 数据泥团9.Primitive Obsession基本类型偏执10 Switch Statements(Switch惊悚现身)11.Parall所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复