1

私は最初の小さな RavenDB アプリケーションを構築していますが、ドメイン モデルを構築するときに、物事に正しく取り組んでいるかどうか疑問に思っています。

モデルの複数の場所で使用したい国のリストがあります。以前は通常、国を格納するデータベース テーブルと、次のような国オブジェクトを作成していました。

public class Country{
    public int Id {get;set;}
    public string CountryName {get;set;}
}

国クラスを使用するときは、別のオブジェクト内にそのインスタンスを保持していました。たとえば、次のようになります。

public class Shop{
    public int Id {get;set;}
    public string Name {get;set;}
    public Country InCountry {get;set;}
}

または

public class Customer{
    public int Id {get;set;}
    public string Surname {get;set;}
    public Country CountryOfResidence {get;set;}
}

などなど。私が今すべきことは、国のIDをクラスShopCustomerクラスに保存することであると考えているので、それらは次のようになります。

public class Shop{
    public int Id {get;set;}
    public string Name {get;set;}
    public int CountryId {get;set;}
}

public class Customer{
    public int Id {get;set;}
    public string Surname {get;set;}
    public int CountryOfResidenceId {get;set;}
}

これらをデータベースから取得すると、Raven API の include 機能を使用して、関連する国オブジェクトを取得できますが、それは別のオブジェクトにあり、たとえば、myCustomer.Country.Name.

明らかに、これは非常に不自然な例ですが、このルートを続行する前に、完全に間違ったツリーを鳴らしていないことを確認したいだけです。

4

1 に答える 1

3

ドキュメントDBを(まだ)適切に使用していませんが、あなたの質問に対する私の考えは次のとおりです。

  • 永続化の実装のニーズに合わせてドメイン モデルを曲げるべきではありませんが、集約設計を完全に永続化することを知らずに保つ機会があれば、それはドキュメント データベースを使用するときだと思います。
  • 国オブジェクトが名前のみで構成されている場合は、値オブジェクトである可能性が高く、ID も必要ありません。値オブジェクトは不変であるため、ショップの国が変更された場合は、オブジェクト全体を置き換えるだけです。複数の集計/エンティティが同じ値を参照していてもかまわないため、ID を参照する必要はありません。
  • 子エンティティに関して: それらは集約の範囲内でのみ目的を果たします。つまり、複数の集約内に同じエンティティが存在するべきではありません。したがって、ID への参照ではなく、オブジェクト全体を保存することも考えました。
  • 他の集計の参照は異なります。IDで参照したいところです。この記事では、その理由を説明します。
于 2012-07-06T20:15:27.080 に答える