2009-07-12 83 views
0

看作是一种this延续与多个输入参数打交道,我有以下的新手问题:使用包装类

什么也是有差别的直接构建预计大量的输入参数的包装类和输入这些参数进入最终的构造函数?

不要误解我的意思,我认为多输入参数的东西非常难看,我试图绕过它,因为就像那个问题的海报一样,我需要处理一个类似Calculator的类这需要很多参数。但是我不明白的是输入参数的包装类会如何解决,因为我还需要构建输入类 - 这与其他选择一样丑陋。

总之,我不认为这样的:

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; 
} 

,当然,我试图避免制定者尽可能多尽可能。

我在这里错过了什么吗?我很想在这方面有所了解,因为我仍然是一个相当新手的程序员。

+0

作为一个旁注,你为什么试图在参数类中避免setter? – 2009-07-12 18:01:00

回答

3

最大的好处是:从变化

  • 绝缘。您可以将 新属性添加到参数类 ,而不必更改 使用它或它的任何呼叫者的类。

  • 代码减少当你链接 方法。如果MyClass需要通过 其周围的参数,MyInputClass 消除了一堆代码。

3

下面是一些的原因,一是想用一个参数类:

  • 重用性:可以保存参数变量和重用他们,也许在另一种方法。
  • 分离关注点:在参数类中执行参数处理,比如验证哪些参数处于活动状态,哪些处于其正确范围内等;你的计算方法只知道如何计算,所以将来你会知道每个元素的位置,而不是逻辑混合。
  • 您可以在calcultor方法中添加一个新值并影响最小。
  • 也许你的计算器方法可以应用于两个不同的参数集,比如一个整数和一个double。只需编写一次计算逻辑并更改参数对象,就可读性更强,可读性更强。

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

0

所有其他的点都是完全有效的。以下是一些权威文本的一些增强:

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