使用包装类处理多个输入参数

时间:2009-07-12 17:51:59

标签: api oop interface constructor

作为this的一种延续,我有以下新手问题:

构建一个需要大量输入参数并将这些参数直接输入到最终构造函数的包装类有什么区别?

不要误解我的意思,我认为多输入参数的事情非常难看,我正试图解决它,因为就像那个问题的海报一样,我需要处理类似计算器的类需要很多参数。但我不明白的是输入参数的包装类会解决什么问题,因为我还需要构建输入类 - 这和其他选择一样丑陋。

总结一下,我不这么认为:

MyClass::MyClass(int param1, int param2, int param3... int paramN)
{
    this->param1 = param1;
    this->param2 = param2;
    this->param3 = param3;
    ...
    this->paramN = paramN;
}

...与此有很大不同:

Result MyClass::myInterface(MyInputClass input)
{
    //perform calculations
}

MyInputClass::MyInputClass(int param1, int param2, int param3... int paramN)
{
    this->param1 = param1;
    this->param2 = param2;
    this->param3 = param3;
    ...
    this->paramN = paramN;
}

当然,我尽量避免使用setter。

我在这里遗漏了什么吗?我很想对此有所了解,因为我还是一个相当新手的程序员。

3 个答案:

答案 0 :(得分:3)

最大的好处是:

  • 改变绝缘。你可以加 参数类的新属性 而不必改变那个类 使用它或任何来电者。

  • 链接时减少代码 方法。如果MyClass需要通过 它的参数,MyInputClass 消除了一堆代码。

答案 1 :(得分:3)

以下是一些原因,有人想使用参数类:

  • 可重用性:您可以将参数保存在变量中并重复使用它们,也许可以使用其他方法。
  • 关注点分离:在参数类中执行参数处理,比如验证哪些参数是活动的,哪些参数在正确的范围内等等;你的计算方法只知道如何计算,所以将来你知道每个都在哪里,没有逻辑混合。
  • 您可以在calcultor方法中添加新值并最小化影响。
  • 也许您的计算器方法可以应用于两个不同的参数集,例如整数和双精度。只需编写一次计算逻辑并更改参数对象,它就更具可读性/可持续性/更快。

某些类不需要在构造函数中初始化每个字段。有时候,制定者是可行的方式。

答案 2 :(得分:0)

所有其他点都完全有效且完善。以下是一些权威文本的补充:

代码完成表明你将任何例程的参数数量限制为7 ,因为“七是人们理解的神奇数字”。然后继续建议传递超过七个参数会增加与调用范围的耦合,并且您应该使用结构化变量(ala MyInputClass)。