“参数太多”保留私有变量或用参数类替换它们

时间:2017-02-23 10:25:20

标签: c# data-structures

我的问题不是“如何处理太多参数”,我在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是否可能意味着安全问题?

也许最简单的解决方案是好的,我问自己太多的问题。

感谢您的反馈

1 个答案:

答案 0 :(得分:0)

您的SomeParameters实际上是一个数据传输对象:

  

当您使用远程接口(例如Remote Facade(388))时,每次调用都很昂贵。因此,您需要减少   通话次数,这意味着您需要转移更多   每次通话的数据。一种方法是使用大量参数。   然而,这通常很难编程 - 实际上,它经常是   Java等语言只能返回一个单独的语言   值。

https://martinfowler.com/eaaCatalog/dataTransferObject.html

我想说您的解决方案2没有任何问题,但我想了解更多有关您的应用程序的上下文以及与您的SomeClass相关的业务。

还值得一读:https://msdn.microsoft.com/en-us/library/ff649585.aspx