我有一个对象,它的构造函数需要大量参数(根据使用情况,从 9 到 13 个)。
我想避免 new MyObject(param1, param2, param3 ... param13)
的丑陋。
我的第一次尝试是创建一个 class MyObjectParams
对于具有公共(public) getter 和 setter 的属性,它给出了类似的东西:
var objectParams = new MyObjectParams
{
Param1 = ...,
Param2 = ...,
...
};
我看到一些大项目,例如 SlimDX for their PresentParameters使用这个设计。看起来好多了。但类并不是一成不变的。
我想要我的MyObjectParams
保持不变,同时仍然使用干净的构造风格。这就是不可变类的样子:
var objectParams = new MyObjectParams
(
param1,
param2,
...
);
注意:它只是将长构造函数行分成几行,因此它更干净,但仍然不如初始值设定项那么可读。
我正在考虑使用命名参数来获取不可变的类和或多或少干净的代码,但我不确定这实际上是否是一个好主意:
var objectParams = new MyObjectParams
(
param1: ...,
param2: ...,
...
);
我应该使用命名参数吗?你能想出更好的方法来解决这个问题吗?
编辑了以下答案:不幸的是,我真的不认为这个设计不好。这 9 个参数确实是必需的,并且在对象的整个生命周期中保持不变。我无法为它们提供默认值,因为它完全取决于使用情况。
最佳答案
您是否考虑过设计一种不需要这么多参数的解决方案?拥有大量参数会使代码耦合非常紧密,从而降低了可维护性。也许您可以重新设计少量代码,以更好地分离类的职责?
关于c# - 打包参数的好设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422456/