我有两种方法:一个参数或多个
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
这是从一个干净的代码点好? 或者,也许它会更好地使用BuildThings并通过IEnumerable只有一件事?或使用参数?
谢谢。
我有两种方法:一个参数或多个
BuildThing(Thing a);
BuildThings(IEnumerable<Thing> things);
这是从一个干净的代码点好? 或者,也许它会更好地使用BuildThings并通过IEnumerable只有一件事?或使用参数?
谢谢。
我个人的偏好是如下
接口:
void Build(Thing thing);
void Build(IEnumerable<Thing> things);
实现:
void Build(Thing thing)
{
Build(new [] { thing });
}
void Build(IEnumerable<Thing> things)
{
//do stuff
}
我更喜欢使用这种模式,因为它确保了原因,你留DRY而给你多重过载的灵活性,不像params
的方式,你必须转换任何非数组枚举为一个数组。
纯粹从“干净的代码”的角度来看,这完全没问题。虽然功能上的替代品可能会或可能不适合你更好。例如,使用params
强制在调用之前枚举集合,而不是在调用内部懒洋洋地列举。
有一两件事可以做:
BuildThings(params Thing[] things);
它使您能够使用:
BuildThings(thing1, thing2, thing3, ...);
PARAMS不会是你的方法很好的解决方案。
我认为只要你有一个实现,就可以拥有2个或更多的方法。
public void BuildThing(Thing a)
{
this.BuildThings(new List<Thing>(){a});
}
您提供的方法看起来是一种很好的做法。当您仅构建单个实例而不是多个实例时,可能会有不同的事情要做。
我不会使用params
,因为这会强制您创建一个数组,例如,如果您有一个列表。
我会考虑两种情况:
BuildThing(Thing a)
我会用BuildThings(IEnumerable<Thing> things)
,并通过IEnumerable的只有一件事params
此选项有一个缺点 - 如果要传递多个参数,则必须将每个IEnumerable
转换为Array
(当然数组除外)。我可能会用params
解决方案。