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
→ <代码>运动点位置、积分速度、积分加速度
MethodA()
函数的两个iml修订进行审查。事实上,CR meta似乎支持这一点。另一种选择,但它的优势是什么?@TaW它是一个短生命实例,只使用了两个正向参数。