我的问题不是“如何处理太多参数”,我在How to avoid "too many parameters" problem in API design?中找到了答案。我需要的是关于实现的补充信息。
我有一个班级
internal class SomeClass
{
private string value1;
private DateTime value2;
private SomeEnum value3;
// and the same until valueALot
internal SomeClass(string val1, DateTime val2, SomeEnum val3, ...)
{ }
}
我用一个新类SomeParameters
替换了构造函数参数internal class SomeParameters
{
internal string value1 { get; set; }
internal DateTime value2 { get; set; }
internal SomeEnum value3 { get; set; }
}
internal class SomeClass
{
internal SomeClass(SomeParameters parameters)
{ }
}
我的问题是:在SomeClass
类中我应该保留单个变量并从SomeParameters分配它们还是应该用SomeParameters
类的实例替换它们?
解决方案1:
internal class SomeClass
{
private string value1;
private DateTime value2;
private SomeEnum value3;
internal SomeClass(SomeParameters parameters)
{
value1 = parameters.value1;
value2 = parameters.value2;
value3 = parameters.value3;
}
}
解决方案2:
internal class SomeClass
{
private SomeParameters _parameters;
internal SomeClass(SomeParameters parameters)
{
_parameters = parameters;
}
}
解决方案2似乎更容易并且避免冗余,但我不知道这是否是一个好习惯。解决方案2是否可能意味着安全问题?
也许最简单的解决方案是好的,我问自己太多的问题。
感谢您的反馈
答案 0 :(得分:0)
您的SomeParameters实际上是一个数据传输对象:
当您使用远程接口(例如Remote Facade(388))时,每次调用都很昂贵。因此,您需要减少 通话次数,这意味着您需要转移更多 每次通话的数据。一种方法是使用大量参数。 然而,这通常很难编程 - 实际上,它经常是 Java等语言只能返回一个单独的语言 值。
https://martinfowler.com/eaaCatalog/dataTransferObject.html
我想说您的解决方案2没有任何问题,但我想了解更多有关您的应用程序的上下文以及与您的SomeClass相关的业务。
还值得一读:https://msdn.microsoft.com/en-us/library/ff649585.aspx