-1

I have a form whose constructor I've overloaded to pass in an enumerated type and a List<int>.

Now I realize I also need to pass in another int (that doesn't belong in the List<int>).

At what point is it considered "good form" (no pun intended) to regroup and refactor and encapsulate all those parameters into a class and pass that?

Or is there a better way (that doesn't require Houdini-esque sleight of hand)?

4

3 回答 3

2

在你为这个函数创建一个新对象之前要考虑的事情

您使用此功能的频率如何?你有重复的代码吗?创建此类是否有助于删除重复代码?它是否提高了效率(代码性能和维护)?哪个更快?客户并不关心这些。

添加另一个具有更多参数的构造函数并不违背任何实践,但如果你有一堆以奇怪的顺序调用自己的构造函数,我建议重新考虑它......

如果您的应用程序需要它,请添加它。有:

public FormConstructor(List<int> someInts, MyEnumThing anEnumYay, int anotherInt)

还不错 - 除了我的命名......

我的意见?如果我没有看到创建类的任何潜在收益,我会添加 Int。

创建一个类“仅仅因为”你不想要很多输入参数是创建所述类的错误原因。

于 2012-07-13T19:05:57.433 回答
2

您可以将字段公开为公共属性并使用以下语法:

var myinstance = new MyType
{
    Prop1 = val1,
    Prop2 = val2,
    Prop3 = val3
};

这节省了您一次又一次地更改构造函数的需要。我考虑到您的“什么时候最好……”的问题,如果我希望它增长超过 2 或 3 个(现在或将来),我个人会同意,我将创建一个参数类。不过,这可能会引起很多争论!

于 2012-07-13T18:54:00.697 回答
1

我想这完全取决于更改后您必须在其他地方进行多少重构。如果将所有内容都推入新类,应用程序的其他部分是否会因此停止工作?这可能会引入多少错误?IMO 三个或四个参数很好,但是一旦我开始将 5 个或更多参数推入签名,我倾向于创建一个类来处理这项工作。

引号等可能会成为一个因素,因为如果您必须在一个小时内完成工作,但创建一个类、更新其他代码和测试需要三个人,您可能只需要添加一个新的参数并稍后重新访问。

于 2012-07-13T18:54:48.457 回答