在我的应用程序中,我必须使用所有ReferenceData构建一个对象。
class ReferenceData{
{
public Complex1 Prop1{ get; set; }
public Complex2 Prop2{ get; set; }
public Complex3 Prop3{ get; set; }
public Complex4 Prop4{ get; set; }
}
以上ReferenceData可能有大约30个复杂属性。我想知道最好的模式/方法来创建干净的ReferenceData对象。
答案 0 :(得分:2)
一个不错的选择是使用Builder模式。
以下是有关该模式的更多信息的链接:http://www.dofactory.com/net/builder-design-pattern
在您的情况下,它可能看起来像这样:
class ReferenceDataBuilder
{
private Complex1 prop1;
private Complex2 prop2;
private Complex3 prop3;
public ReferenceDataBuilder setProp1 (Complex1 value)
{
this.prop1 = value;
return this;
}
public ReferenceDataBuilder setProp2 (Complex2 value)
{
this.prop2 = value;
return this;
}
public ReferenceDataBuilder setProp3 (Complex3 value)
{
this.prop3 = value;
return this;
}
public ReferenceData make()
{
return new ReferenceData(prop1, prop2, prop3);
}
}
class ReferenceData
{
public Complex1 Prop1{ get; }
public Complex2 Prop2{ get; }
public Complex3 Prop3{ get; }
public ReferenceData(Complex1 prop1, Complex2 prop2, Complex3 prop3)
{
this.Prop1 = prop1;
this.Prop2 = prop2;
this.Prop3 = prop3;
}
}
此设计比您可能已经使用的设计有一些好处。首先,此模式允许您保持ReferenceData
不可变,并将构建ReferenceData
的所有状态移动到构建器类(它应该只存在足够长的时间以获取ReferenceData
的实例)。此外,现在您可以在Builder中使用更清晰的验证代码,以确保在创建ReferenceData
实例之前正确设置属性。您还可以为Complex1
,Complex2
和Complex3
数据类型创建构建器,并将它们与ReferenceData构建器一起使用,以进一步简化实例创建。
您可以像这样使用构建器:
ReferenceData refdata = (new ReferenceDataBuilder())
.setProp1((new Complex1Builder()).SomeValue("a").build())
.setProp2((new Complex2Builder()).SomeOtherValue("b"))
.setProp3("Some third value")
.build();