类设计 - 属性还是参数?

时间:2009-03-10 22:47:30

标签: c# class-design

我正在设计一个班级......

有一些关键方法需要传递给它们的对象,或者它们需要能够“获取”一个对象。

所以问题是,你应该使用getter / setter还是直接将对象作为参数发送给方法 - 以使方法正常工作。或者你应该通过构造函数设置对象,如果它们对类正确运行是非常重要的吗?

4 个答案:

答案 0 :(得分:5)

如果在没有某个对象的情况下拥有此类的实例没有意义(例如,在没有连接到数据库的情况下构造数据访问类可能没有意义),那么它就是“依赖”,应该是构造函数的一部分。

如果您的班级在没有它的情况下可以存活,或者可以使用某些默认值,那么您可以改为将其作为属性并在使用之前检查它是否已分配。

在大多数情况下,我强烈主张构造函数依赖注入。

答案 1 :(得分:5)

问题不在于它们是多么“至关重要”(根据定义,每种方法都需要拥有所需的数据)。一个更好的问题是他们改变的频率。如果每次调用方法(或者至少可以合理地)它们将是不同的,它们应该是参数。如果预期它们在对象的生命周期(或其中的很大一部分)中通常是相同的,则它们应与对象一起存储。

在后一种情况下,不要只是依赖于用户调用setter。如果它们是必需的,它们应该在构造函数中设置,即使它们可以被setter更改。

答案 2 :(得分:3)

正如您所提到的,您有以下三种选择:

使用getter / setters

您可能知道,get / set将指示对象的状态,在对象生存期内(通常)访问多次。因此,如果你有'CrucialMethod1'到'CrucialMethodN'的场景消耗这种状态,那么可以使用它。此外,这还有助于从外部暴露国家。

用作构造函数的参数

通常,构造函数的参数将“指定”对象初始化的状态。因此,如果您有可能会或可能不会调用'CrucialMethod'的情况,那么这将不是最合适的。

用作方法的参数

这在“CrucialMethod”对传递的参数进行/转换(依赖)的情况下非常有用。这有助于调用方法而不依赖于参数的状态。

你的电话!

答案 3 :(得分:1)

如果要求类正确运行,则应在构造函数中要求它们或将它们放在其中。

至于传入与否。我更喜欢课程可以照顾自己,所以让它完成工作并获得它所需要的东西。