Fork me on GitHub

代码的坏味道【2】


返回总目录


四、Long Parameter List(过长参数列)

太长的参数列难以理解,太多参数会造成前后不一致、不易使用。

1、一般情况来说,如果参数多于3个,就可以考虑使用对象了。将函数所需要的参数封装在一个新类中,将这个类当做参数。

2、如果方法的参数数目不定,且参数类型一致,也可以使用params关键字,减少重复参数。

只需要传给函数足够的、让其可以从中获取自己需要的东西就行了

五、Divergent Change(发散式变化)

通俗地说,就是某个类经常因为不同的原因在不同的方向上发生变化(一个类受多种变化的影响)。

此时我们要做的就是找出某特定原因而造成的所有变化,然后将他们提炼到另一个类中。

针对某一外界变化的所有修改,只应发生在单一类中,而这个类中所有的内容都应反映此变化

六、Shotgun Surgery(霰弹式变化)

这种情况与Divergent Change恰恰相反。遇到某种变化,都必须在许多不同的类内做出许多小修改(一种变化引发多个类相应修改)。

把所有需要修改的代码放进同一个类中。如果暂时没有合适的类可以安置这些代码,就创造一个。

Shotgun Surgery和Divergent Change你都需要适时整理重构代码,让“外界变化”和“需要修改的类”趋于一一对应。

七、Feature Envy(依恋情结)

 这种坏味道主要在于:一个函数使用其他类属性比使用自身类属性还要多。换句话说,就是某个函数为了计算某个值,从另一个对象那儿调用几乎半打的取值函数。

 疗法也显而易见,就是把这部分代码提炼到单独的函数中,然后将函数再移到它该在的地方。

 当然了,并非所有情况都这么简单。一个函数往往会用到几个类的功能,那么它究竟魂归何处?原则就是:判断哪个类拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起。

将数据和对数据的操作行为包装在一起

八、Data Clumps(数据泥团)

两个类中有相同的字段、许多函数签名中有相同的参数。

找出这些数据以字段形式出现的地方,将它们提炼到一个独立的对象中。要是想缩减参数可以考虑以一个对象取代这些参数。

总是绑在一起的数据应该拥有属于它们自己的对象

To Be Continued...

 

posted @ 2017-11-14 13:48 NaYoung 阅读(...) 评论(...) 编辑 收藏