类设计:通过Property(Set var)vs Function vs Constructor参数传递值

时间:2010-07-08 07:41:36

标签: design-patterns oop

这是一个悬而未决的问题。在决定这些之间时,我总是一直在挠头。我可以通过以下方式将值传递给类:

将参数传递给类函数:

MyClass m = new MyClass();
m.DoSomething(arg);

创建对象时传递参数:

MyClass m = new MyClass(arg);
m.DoSomething();

使用不同的函数/ Property

设置值
MyClass m = new MyClass();
m.SetArg(arg);
m.DoSomething();

我明白这取决于对象需要保留参数的天气,但我认为这里有一条细线吗?如果传递太多变量,它将成为常规的函数调用。

2 个答案:

答案 0 :(得分:8)

我使用的一些经验法则:

如果参数对类的操作至关重要,则应通过构造函数传递它。

如果仅对该功能至关重要,请通过该功能传入。

如果它只是类数据,请使用setter / properties来填充它。

如果有很多这样的参数,请将参数重构为自己的容器类(例如MyClassSettings)。

答案 1 :(得分:0)

使用构造函数参数提供类使用的依赖项。

在对象之间传递消息时使用方法参数。

尽可能避免使用getter和setter(有关此主题的完整讨论,请参阅Why getter and setter methods are evil)。