我是否达到了重构临界点?

时间:2012-07-13 18:50:03

标签: c# parameters constructor refactoring

我有一个表单,其构造函数我已经重载以传递枚举类型和List<int>

现在我意识到我还需要传递另一个int(不属于List<int>)。

在什么时候它被认为是“好形式”(没有双关语意图)重新组合和重构并将所有这些参数封装到一个类中并传递给它?

还是有更好的方式(不需要Houdini式的手法)?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

在您开始为此功能创建新对象之前需要考虑的事项

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

添加另一个带有更多参数的构造函数不会违反任何实践,但是如果你有一个废话加载的构造函数,它们会以奇怪的顺序调用自己,我建议重新考虑它......

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

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

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

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

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

答案 2 :(得分:1)

我想这一切都取决于你在其他地方因改变而需要做多少重构。如果将所有内容都推送到新类中,那么应用程序的其他部分是否会停止工作?这会引入多少个错误? IMO有三个或四个参数可以,但是一旦我开始将5个或更多个参数添加到签名中,我倾向于创建一个类来处理这个工作。

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