长参数列表
特征
一个方法有三个或以上的参数。
原因
在单个方法合并了几种不同类型的算法后可能会出现长参数列表。可能已经创建了一个长列表来控制将运行哪种算法以及如何运行。
长参数列表可能也是使类更加独立的副产品。例如,在方法中创建所需的特定对象的代码已从方法移至调用该方法的代码,但是创建的对象将其作为参数传递给该方法。因此,原始类不再知道对象之间的关系,而依赖性也有所下降。但是,如果创建了其中几个对象,则每个对象都需要其自己的参数,这意味着更长的参数列表。
很难理解这样的列表,随着它们的生长更长的时间,它们变得矛盾且难以使用。一个方法可以使用其自己对象的数据,而不是一长串参数。如果当前对象不包含所有必要的数据,则可以将另一个对象(将获得必要的数据)作为方法参数传递。
解决方案
检查哪些值传递给参数。如果某些参数只是另一个对象的方法调用的结果,请使用方法调用替换参数。该对象可以放置在自己的类的字段中,也可以作为方法参数传递。
不要将从另一个对象接收的一组数据作为参数传递,而是使用保留整个对象将对象本身传递给方法。
但是,如果这些参数来自不同的来源,则可以通过引入参数对象将它们作为单个参数对象传递。
好处
- 更可读的更短的代码
- 重构可以发现以前没有注意的重复代码
什么时候忽略
如果这样做会导致类之间不必要的依赖性,请不要摆脱参数。