类设计-具有公共设置员的ctor或属性

时间:2018-12-04 10:57:26

标签: c# .net

一个非常简单的问题,说我有一个具有20个引用类型属性的类,我知道只会在创建类时/在创建类后立即设置,而在没有任何类的情况下这些属性确实是必需的。

在这种情况下,最佳实践是创建一个接受20个属性的ctor(由于它们都是引用类型,因此如果需要,它们仍允许您传递null)并确保我的所有财产都没有setter

或...

要根本不拥有ctor,而只需为我的所有财产提供setter

我倾向于后者,因为它易于实现并且(尽管)不能保证对象的不变性,但可以说是更简洁的代码,但是这些类仅在内部使用,我知道我也不会对其进行更改

编辑

如果您要投票结束该问题,至少要得体面地解释为什么您认为该问题对于如此高的SO标准而言“不够好”。

如果这不是这里的问题,我真的不知道SO的意义了。

3 个答案:

答案 0 :(得分:3)

如果所有这些属性不是必需的,并且它们不必是只读的,则不需要构造函数。没有人愿意调用一个带有20个参数的构造函数,尤其是在不必要的情况下。

因此,即使这个问题往往是主观的,也要使用属性并省略构造函数。

答案 1 :(得分:0)

您应该为其设置属性并使用对象初始化程序:

class Cat
{
    // Auto-implemented properties.
    public int Age { get; set; }
    public string Name { get; set; }
    public object OtherProperty { get; set; }
}

Cat cat = new Cat { Age = 10, Name = "Fluffy" };

这为您提供了简洁的代码,而无需指定不需要的属性。即使您指定了所有属性,它也不会更长。

我将使用构造器,其中属性是必需的,或者基于某种源对象,例如DataRow或文件。

答案 2 :(得分:-1)

看起来像是违反单一责任原则。建议在包含构造函数的方法中使用0-3个参数。