C# 我是否应该创建一个新类作为方法使用';s参数

C# 我是否应该创建一个新类作为方法使用';s参数,c#,C#,我们有一个类,它接受了许多不同的参数 void MethodA(ClassA a, ClassB b, ClassC c ....) 我想创建一个新类 public class InputClass { public ClassA A { get; set; } public ClassB B { get; set; } public ClassC C { get; set; } ......... }

我们有一个类,它接受了许多不同的参数

void MethodA(ClassA a, ClassB b, ClassC c ....) 
我想创建一个新类

    public class InputClass
    {
        public ClassA A { get; set; }
        public ClassB B { get; set; }
        public ClassC C { get; set; }
        .........
    }
这样我就可以把methodA改成

void MethodA(InputClass input)

我认为这会使methodA看起来更干净,但您认为我应该这样做吗,因为InputClass不提供任何有意义的对象。

您可以实现一个结构:

struct ClassesContainer
{
    public ClassA A { get; set; }
    public ClassB B { get; set; }
    public ClassC C { get; set; }
    .........
}
然后:

void MethodA(ClassesContainer input)

当方法参数的列表增加时,通常很难跟踪它们并维护方法。当您有一组自然组合在一起的参数,或者您必须使用相同的参数集顺序调用多个方法时,通常最好将它们提取到称为parameter object的单独类中。正如您正确提到的,这使目标方法看起来更干净

因为InputClass不提供任何有意义的对象

InputClass
的意思是作为参数值的容器,这足以证明它的存在


马丁·福勒(Martin Fowler)和其他聪明人甚至对此有一种模式,称为。

这取决于参数的性质以及参数在特定连词中使用的频率

例如,
intx,inty,intz
自然可以放在
结构中。您是否应该这样做,取决于您使用该点的频率

另一方面,
mycat的字符串名称
janesshirt的字符串颜色
intageoftomsdog
的共同点太少了,不应该将它们放在抽象的
InputClass

对于这类问题,我个人的指导方针是:如果我发现
InputClass
的名称是一个(主要是;-)实词和描述性的名称,那么我将参数分组:

  • intx,y,z
    → <代码>点
  • int r,g,b,a
    → <代码>颜色
  • int宽度、高度
    → <代码>大小或
    范围
    或任何内容
  • string firstName、middleName、secondName
    → <代码>名称
  • 点位置、积分速度、积分加速度
    → <代码>运动

你是在为别人做那个程序吗?…你自己的问题有答案…你想让它看起来更干净…那为什么还要关心我的想法??…这不是一个理想的问题!这个问题可能更适合。@DGibbs这也不是代码审查的理想问题……这个提问者已经有了答案,任何差异都完全取决于回答者的意见@DGibbs no CR不适合,因为示例代码/stubb代码脱离主题。@MathewsMathai我没有说这是一个理想的问题。我说它更合适。他本质上是在要求对他的
MethodA()
函数的两个iml修订进行审查。事实上,CR meta似乎支持这一点。另一种选择,但它的优势是什么?@TaW它是一个短生命实例,只使用了两个正向参数。