Rya*_*yan 13 c# parameters design-patterns
假设参数类型都相同,那么方法的参数数量是否有经验法则?我只是想知道我应该在哪里绘制线和我的替代品(即接口,数组等).
史蒂夫麦康奈尔在Code Complete中解决了这一问题,理由是研究表明人们一次无法真正处理超过七个信息块,在任何实际情况下都会将七个信息作为常识限制.
在该节的结论段落(第二版第178页)中,他写道:
如果您发现自己一直传递多个参数,则例程之间的耦合太紧......如果要将相同的数据传递给许多不同的例程,请将例程分组到一个类中,并将常用数据视为类数据.
我会说这真的取决于你的情况.你在为整套做些什么吗?例如,验证所有项目或聚合数据?在这种情况下,我会将IEnumerable作为单个参数传递.
传递大量参数可能是关注点分离不良的好兆头(即你的方法做得太多了),但听起来好像在这种情况下,你传递一组定义明确的项目以某种方式迭代它们.鉴于C#3中的集合初始化器语法,我会在几乎所有情况下推荐IEnumerable,而不是像参数列表那样Type a, Type b, Type c....
当然,如果您的参数实际上被区别对待,那么将它们分开是有意义的,但我会考虑您在这种情况下正在做什么.想到一个简单的案例就是构建树数据结构并具有构建节点子节点的功能.语法不佳可能是:
Node BuildTree( Node parent, Node child1, Node child2...)
Run Code Online (Sandbox Code Playgroud)
我可能会追求更像:
void ConstructChildren( this Node parent, IEnumerable<Node> children)
Run Code Online (Sandbox Code Playgroud)
但是,如果您可以提供有关您的案例的更多信息,以及您对参数执行的逻辑类型,则可能更容易看出它是否是折叠或重构的良好候选者.