7

DDDで新しいエンティティのデフォルトプロパティを設定するための最良の方法は何ですか?また、複雑なプロパティ(コレクションなど)のデフォルトの状態を設定するための最良の方法は何ですか?

私の考えでは、デフォルト値はビジネスルールの形式であり(「デフォルトでは、XをYとZにする」)、ドメインはビジネスを表すため、モデル自体に含める必要があります。このアプローチでは、モデル自体の静的な「GetNew()」メソッドが機能する可能性があります。

パブリッククラスPerson{
    public string Name {get; セットする; }
    public DateTime DateOfBirth {get; セットする; }
    public bool IsAlive {get; セットする; }
    public List Limbs {get; セットする; }

    public static Person GetNew(){
        新しいPerson()を返す{
            IsAlive = true、
            Limbs = new List(){RightArm、LeftArm、RightLeg、LeftLeg}
        }
    }
}

残念ながら、この場合、コレクションプロパティを別のリストのすべてのメンバーに設定する必要があります。このモデルは、リポジトリ/ DbContextから切り離されているため、すべてをロードする方法はありません。

安っぽい解決策は、パラメータとして渡すことです:

public static Person GetNew(List<Limb> allLimbs) {
    return new Person() { 
        IsAlive = true,
        Limbs = allLimbs
    }
}

あるいは、単純なモデルプロパティと複雑なモデルプロパティのデフォルト値を設定するためのより良い方法はありますか?

4

2 に答える 2

4

これは、 DDDのファクトリパターンのインスタンスです。のような専用クラス、PersonFactoryまたは例のように静的メソッドのいずれかです。まったく新しいクラスを作成する必要がないので、静的メソッドを好みます。

コレクションを初期化する限り、GetNewコレクションをパラメーターとして使用するメソッドは、私が使用するものです。それは重要な制約を述べています-あなたがそのコレクションを必要とする新しい個人エンティティを作成するために。コレクションインスタンスは、必要に応じて特定のユースケースをホストするアプリケーションサービスによって提供されます。より一般的には、デフォルト値をデータベースに保存できます。その場合、アプリケーションサービスはリポジトリを呼び出して、必要な値を取得します。

于 2013-01-31T01:05:15.860 に答える
0

JoshuaBlochのEffectiveJava(Second Edition)のStaticBuilderを見てください。そこには静的ビルダークラスがあり、構築前にプロパティを設定するための呼び出しをチェーンするので、大量の引数を取るコンストラクターがあるか、すべてのプロパティにセッターを配置する必要があるという問題を解決します(この場合、効果的に構造体)。

于 2013-01-31T00:56:50.003 に答える