c# - 打包参数的好设计?

标签 c# parameter-passing

我有一个对象,它的构造函数需要大量参数(根据使用情况,从 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/

相关文章:

c# - 通过导航属性加入的 Lambda 语法?

c# - 如何正确验证适用于 YouTube v3 Google APIs for .NET 的 Google 帐户

c++ - std::bind 和/或 std::forward 的语义

java - 使用参数行 Java 打开快捷方式 (.lnk)

Java 将枚举作为参数从一个类传递到另一个类

c# - 如何使用httpClient在没有太多请求的情况下循环通过rest api

c# - 如何让我的菜单控件居中?

c# - 如何在使用 blink1 HidLibrary 的类中建立连接/断开事件处理程序?

python - 如何使用整数变量作为函数的参数?

c - 有没有办法在 C 中传递这样的字符串?