|
|
1
12
如果我要做什么,那就是创建一个包含所有参数的结构,以获得良好的智能和强名称。
|
|
|
2
6
逐一传递它们,因为:
但是,如果参数确实是数组,则传递数组。例子: 对于看起来像这样的函数,使用以下符号:
对于看起来像这样的函数,请使用数组:
|
|
|
3
4
您的场景在Martin Fowler的重构书中介绍了参数对象重构。这本书很值得拥有,但对于那些不值得拥有的人来说,它描述了重构 here 。还有一个预览 publisher's site 以及谷歌图书。它建议不要用数组替换参数,而是用新对象替换。 |
|
|
4
3
关于Skeets对我上面例子的评论,他会使用类而不是结构,也许我也会更清楚地说明在哪里使用类和在哪里使用结构。我想还有其他人对此也很好奇。 正如我所看到的,使用类的主要原因是你可以使其不可变,但结构也是如此吗? 例如:
} 我早就觉得,当我们可以在结构中拥有属性、初始化器、字段以及类所拥有的一切时,我不再知道类和结构之间的区别了。我知道类是引用类型,结构是值类型,但在上述情况下,将其用作函数中的参数有什么区别呢? 我在网站上找到了对差异的描述 http://www.startvbdotnet.com/oop/structure.aspx 这个描述正是我在脑海中所描绘的:
也许这应该是一个自己的问题,但当我们对结构和类作为参数有不同的看法时,我觉得这是相关的。 |
|
|
5
2
我假设你使用的是C#4,可以使用命名参数:
这些使得代码几乎和VB或Smalltalk一样可读。 :-) 如果没有,我会同意戴夫·马克尔的说法。 |
|
|
6
2
如果这是大量使用的库代码,并且某些参数具有默认值的典型值,那么您应该考虑Dave Markle的建议,并提供一系列参数逐渐减少的重载。这是《Microsoft Framework设计指南》中推荐的方法。 或者,您可以使用Stefan的方法获得类似的效果,通过使用成员初始化器设置默认值并使用一系列ctor重载。 |
|
|
7
1
如果你真的不想单独传递你的参数,我建议创建一个新类来封装你的所有参数。为此,您可以(在Java中,最有可能在C#中)在包含粗糙方法的类中声明一个公共内部类。这避免了让类四处浮动,而这些类实际上只是辅助类型。 |
|
|
8
1
我会说,也要单独通过它们。我不喜欢创建一个类,然后将该类作为参数传递的想法。这是一种印章耦合的形式,这意味着由于一个类使用另一个类,因此进行更改将更加困难。重用一个类意味着你也必须重用另一个类。 你可以使用接口来减少戳耦合,但这对我来说开销太大了,所以我喜欢单独传递参数。 |
|
|
9
0
一个函数真的需要8-9个参数吗?在我看来,如果你需要那么多参数,那么你可能在该函数中做了太多不同的事情。尝试将代码重构为单独的函数,以便每个函数都有一个目的。 |
|
|
10
-1
除非函数作用于数组,否则不要将它们作为数组传递,我也不会创建新的数据结构来对参数进行分组,原因如下
实际上,将每个参数传递给函数的唯一缺点是,您可能无法将函数放入一行代码中,但不要忘记在函数调用之前需要填充数据结构的行。 |