1 符号和症状
2 病因
把多种类型的算法合并到单个方法中之后,可能会出现长参数表。长参数表可能会用于控制运行哪个算法,如何运行。
长参数表可能会让类更加独立。比如说,方法中创建特定对象的代码,可能会移动到调用此方法的代码中,而特定的对象被作为参数传递。最初的类,不需要知道对象间的关系,降低了依赖。如果创建一些这样的对象,每个都需要参数,则需要更长的参数列表。
这种长参数列表很难理解,难以使用。方法可以使用所属对象自有的数据来代替长参数表。如果所属对象没有所需的数据,可以传递一个含有必须数据的对象作为方法参数。
3 治疗
- 检查作为参数传递的值。如果某些参数只是对另一个对象进行方法调用的结果,用方法调用替代参数。这个对象可以作为类的字段,或者通过方法参数传入。
- 不是把从另一个对象收到的数据作为参数传递,而是把这个对象本身作为参数传入,也就是保存整个对象。
- 如果有很多无关的数据元素,有时候可以合并成单个参数对象,也就是引入参数对象。
4 疗效
- 更可读、更短的代码。
- 重构过程中可能会发现先前没有注意到的重复代码。