0

私は DDD の初心者で、次のシナリオでは C# でエレガントにモデル化しようとしています。

  1. 基本的に name プロパティと、特定の順序で実行する必要がある項目のリストのみを持つテンプレート。

    public class Template
    {
        public string Name { get; set; }
        public List<Item> Items { get; set; }
    }
    
    public class Item
    {
        public string Name { get; set; }
        public int Order { get; set; }
    }
    
  2. プロファイルと呼ばれるタイプ。

    public class Profile
    {
        public string Name { get; set; }
    }
    

プロファイルクラスは、

  • テンプレート A を使用して、所有しているアイテムとその順序を把握しています
  • テンプレート A が変更された場合、リスト テンプレート A の複製を保持したくないため、新しいバージョンを使用します。
  • 私が削除されても、テンプレートはまったく影響を受けません
  • 私が作成された場合、テンプレートが必要です
  • 私は私の名前だけで世話をすることができます

これは、集約ルートがテンプレートであり、アイテムのリストとプロファイルのリストがあるように見えます。しかし、プロファイルの名前で検索すると、指定された名前のプロファイルを持つすべてのテンプレートを検索する必要があるように感じます。どういうわけか、CRUD のバックグラウンドから来て、それは高い代償を払うように思えます。また、プロファイルはテンプレートを使用するプロファイルであり、それを使用するプロファイルをテンプレートに認識させることは間違っているようです。

これをどのようにモデル化しますか?ここでの集約ルートは何ですか? 複数ですか?UI から使用する場合、どのように検索を実行しますか?

4

2 に答える 2

4

しないでください。DDD を学ぶ必要があるときは、メタモデリングや過度の抽象化を開始しないでください。これは、DDD の学習とは関係のないことに注意を集中させ、気を散らし、間違った決定を下す原因となるため、非常に悪い考えです。

具体的な問題を解決することから始める必要があります。抽象化は、具体的なソリューションに由来する必要があります。それら (少なくとも 3 つ) を実装したら、抽象化を検討します。

于 2015-07-31T11:36:18.003 に答える
2

他の集約内にネストできないか、ネストできないため、別の集約として存在する必要がありますProfile。は、使用している参照を保持する必要がTemplateあるかのように聞こえます。したがって、id ( ) によるテンプレートへの参照を含めます。ProfileTemplateTemplate.Name

public class Template
{
    public string Name { get; set; }

    public List<Item> Items { get; set; }
}

public class Item
{
    public string Name { get; set; }

    public int Order { get; set; }
}

public class Profile
{
    public string Name { get; set; }

    public string TemplateName { get; set; }
}
于 2015-07-31T09:56:02.597 に答える