代码的坏味道【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...