如果一个类在构造函数中有太多参数,我们可以使用结构或构建器模式。
哪个更好?有什么好的做法吗?
这将取决于参数是什么以及它们之间的关系,以及有多少是必需的还是可选的。
如果多个参数相关,通常最好创建一个单独的类(或结构)来存储这些参数。
例如,而不是
TransferMoney(long srcAccountNumber, int srcAmount, Currency srcCurrency, long destAccountNumber)
我们可以看到 src ammount 和 srcCurrency 是相关的,我们可以创建一个新类来处理各种金额的货币(并可能添加转换为其他货币的方法等)并减少参数数量:
TransferMoney(long srcAccountNumber, Money amount, long destAccountNumber)
这个问题与语言无关,但如果您的语言不支持默认值(如 Java),那么您可能需要具有不同数量和类型的参数的多个重载方法以适应所有可能的组合。如果有很多组合,那么 Builder 是一种更清洁的方式。
使用具有满足您需要的结构的类。Martin Fowler 有一种称为DataTransferObject (DTO)的类似技术,在该技术中,您传递对象模型而不是使用多次调用(可能是数据库调用)来检索数据,从而降低了成本。
构建器模式的好处:
缺点:对象处于可变状态。