我们做了很多的单元测试,我们的业务对象的重构,而我似乎有很对类设计比其他同龄人不同的意见。
我不喜欢的示例类:
public class Foo
{
private string field1;
private string field2;
private string field3;
private string field4;
private string field5;
public Foo() { }
public Foo(string in1, string in2)
{
field1 = in1;
field2 = in2;
}
public Foo(string in1, string in2, string in3, string in4)
{
field1 = in1;
field2 = in2;
field3 = in3;
}
public Prop1
{ get { return field1; } }
{ set { field1 = value; } }
public Prop2
{ get { return field2; } }
{ set { field2 = value; } }
public Prop3
{ get { return field3; } }
{ set { field3 = value; } }
public Prop4
{ get { return field4; } }
{ set { field4 = value; } }
public Prop5
{ get { return field5; } }
{ set { field5 = value; } }
}
在“ real”类中,它们不是全部都是字符串,但是在某些情况下,我们有30个备用字段用于完全公共属性。
我讨厌这堂课,而且我不知道我是否只是在挑剔。注意事项:
- 属性中没有逻辑的私有后备字段,似乎是不必要的并使类膨胀
- 多个构造函数(还可以)但与
- 所有拥有公开授权者的物业,我不是粉丝。
- 由于构造函数为空,可能不会为属性分配任何值,如果调用者不知道,则可能会得到一些非常不需要且难以测试的行为。
- 属性太多!(在30例中)
作为执行者,我很难真正知道对象Foo
在任何给定时间处于什么状态。有人提出了这样的论点:“ Prop5
在构造对象时,我们可能没有必要的信息。好吧,我想我可以理解,但是如果是这样,则只Prop5
公开setter,而不是在一个类中最多公开30个属性。
我是否只是因为想要一门“易于使用”而不是“易于写作(一切都公开)”的课程而变得挑剔和/或疯狂?诸如此类的类对我尖叫,我不知道将如何使用它,所以我只是将所有内容公开以防万一。
如果我不是很挑剔,那么有什么好的论点可以对抗这种思维呢?我不太善于表达观点,因为我很沮丧地试图表达自己的观点(当然不是故意的)。
get
或set
:-)