参数列表vs结构
在给函数传值的时候,我们可以通过参数列表的方式,也可以通过定义一个结构的方式。在最近的工作中,我认为前一种方式更好。
例如以下代码:
//通过参数列表传递值
public void Create(long param1, long param2,long param3)
{
..
}
//通过结构传递值
public sealed class ClassOjbect
{
public long param1;
public long param2;
public long param3;
}
public void Create(ClassObject obj)
{
..
}
public void Create(long param1, long param2,long param3)
{
..
}
//通过结构传递值
public sealed class ClassOjbect
{
public long param1;
public long param2;
public long param3;
}
public void Create(ClassObject obj)
{
..
}
在第一种方法中,如果我们在参数列表中增加一个参数,那么我们就要修改项目中的其它很多地方,因为它是一个公有方法,立即编译,立即报错。
在第二种方法中,如果我们在ClassObject中增加一个参数,那么我们似乎不需要修改什么地方,因为参数只是对ClassObject的地址进行引用,而不是里面的成员变量,所以在编译时,几乎不会出现什么错误。
从表面上看,第二种方法更好一些,因为对系统作出修改后,系统本身没有什么不良反应。但是第二中方法却给bug的产生带来了可能。
因为Create是一个公有方法,对它的调用带有全局性,我们必须能够保证所有调用Create方法的函数都能够为Create新增的参数赋值。而第二种方法不能够给于这种保证,因为系统没有什么反应,我们必须通过查找的方式来找到所有调用Create的地方,然后给ClassObject对象的新增成员变量赋值。
而第一种方法却能够很好地解决这个问题,因为我们可以通过系统编译时产生的错误信息,准确地找到调用Create的地方。
虽然第一种方法的改动很大,并且可能影响到其它的模块,但是它让所有的改动都被挡在了编译阶段。我想谁都不会希望由于改动系统中的某个地方而引入新的bug吧。
但是话又要说两头,第二种方法还是有用武之地的。但是这个话题就到此为止了,希望各位同行也说说自己的看法。