1 符号和症状

方法有3或者4个以上的参数。
05 代码坏味之肿胀-4:长参数列表 - 图1

2 病因

把多种类型的算法合并到单个方法中之后,可能会出现长参数表。长参数表可能会用于控制运行哪个算法,如何运行。
长参数表可能会让类更加独立。比如说,方法中创建特定对象的代码,可能会移动到调用此方法的代码中,而特定的对象被作为参数传递。最初的类,不需要知道对象间的关系,降低了依赖。如果创建一些这样的对象,每个都需要参数,则需要更长的参数列表。
这种长参数列表很难理解,难以使用。方法可以使用所属对象自有的数据来代替长参数表。如果所属对象没有所需的数据,可以传递一个含有必须数据的对象作为方法参数。

3 治疗

  • 检查作为参数传递的值。如果某些参数只是对另一个对象进行方法调用的结果,用方法调用替代参数。这个对象可以作为类的字段,或者通过方法参数传入。
  • 不是把从另一个对象收到的数据作为参数传递,而是把这个对象本身作为参数传入,也就是保存整个对象
  • 如果有很多无关的数据元素,有时候可以合并成单个参数对象,也就是引入参数对象

05 代码坏味之肿胀-4:长参数列表 - 图2

4 疗效

  • 更可读、更短的代码。
  • 重构过程中可能会发现先前没有注意到的重复代码。