2016-06-18 4 views
0

私のアプリケーションでは、すべての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

?ここで解決すべき明確な問題があるかどうかはわかりません。 – blins

+0

このモデルは〜20のプロパティを持っているので私はモデルクラスのReferenceDataしか持っていません。このモデルにデータをロードするためのクリーンな方法が必要です。 ReferenceDataオブジェクトを返します。 – Deepak

+0

[Fluentインターフェイス](https://en.wikipedia.org/wiki/Fluent_interface)を参照してください。 –

答えて

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でよりクリーンな検証コードを使用することができます。また、Complex1Complex2、およびComplex3データ型のBuilderを作成し、それらをReferenceData Builderと一緒に使用して、インスタンス作成をさらに簡素化することもできます。

あなたはこのようなビルダーを使用したい:あなたが持っているものと間違って何

ReferenceData refdata = (new ReferenceDataBuilder()) 
    .setProp1((new Complex1Builder()).SomeValue("a").build()) 
    .setProp2((new Complex2Builder()).SomeOtherValue("b")) 
    .setProp3("Some third value") 
    .build(); 
関連する問題