0

ルートアグリゲートであるPersonアグリゲートがあります

public class Person 
{
    private int id;
    private readonly PersonID personID;

    private readonly string email;
    private readonly string firstName;
    private readonly string lastName;

    private readonly string username;
    private readonly string password;
    private readonly Address BillingAddress;
}

public class Currency : IValueObject<Currency>
{
    private string name;
    private string currencyCode;
    private decimal rate;
    private string displayLocale;
    private string customFormatting;
    private int displayOrder;
    private bool primaryExchangeRateCurrency;
    private bool primaryStoreCurrency;

    //<summary>
    //Gets or a value indicating whether the currency is primary exchange rate currency
    //</summary>

    public bool IsPrimaryExchangeRateCurrency
    {
       get
       {
           return primaryExchangeRateCurrency;
       }
    }

   /// <summary>
    /// Gets or a value indicating whether the currency is primary store currency
    /// </summary>

    public bool IsPrimaryStoreCurrency
    {
         get
         {
                return primaryStoreCurrency;
         }
    }
}

Personクラスで参照されるCurrencyクラス。

したがって、Personエンティティが作成された場合は、それも通貨に関連付ける必要があります。ただし、作成されたすべての通貨の中で、デフォルトのプライマリストア通貨がどれであるかを知りたいです。通貨が1つしかないので、Personで知りたくありません。作成されたすべての人の通貨からPrimaryStoreCurrencyである通貨を取得したいと思います。

ユーザーがドロップダウンから通貨を選択してシステムに登録できるように、ドロップダウンで通貨をバインドしたいと思います。

では、通貨を個別の集計として作成しますか?

4

2 に答える 2

5

通貨とは、USD、EGP、EUR、..などのアプリケーションの通貨定義を意味する場合、再利用可能なエンティティである必要があります。1000米ドルのように金額の価値を意味する場合、それは金額と通貨タイプをカプセル化する価値オブジェクトです。

于 2011-04-16T22:17:16.800 に答える
4

次の引用は、値オブジェクトとは何かを説明しているEricEvansからのものです。

概念的なアイデンティティを持たないドメインの記述的側面を表すオブジェクトは、VALUEOBJECTと呼ばれます。値オブジェクトは、誰であるか、誰であるかではなく、それらが何であるかだけを気にするデザインの要素を表すためにインスタンス化されます。

これに関する別のリファレンスは、 DaveLaribeeによって書かれたドメイン駆動設計に関するMSDNの記事です。

値オブジェクトは、モデリングしているドメインで重要な記述子またはプロパティです。エンティティとは異なり、アイデンティティはありません。彼らは単にアイデンティティを持っているものを説明します。「35ドル」というエンティティを変更しますか、それともアカウントの残高を増やしますか?

これらの2つの参照を使用すると、通貨はエンティティではなく値オブジェクトである必要があります。通貨は、時間の経過とともにいかなる種類のアイデンティティも持っていません-それは個人エンティティの記述的特性です-彼らが請求されることを好む通貨だと思います。

また、2つの異なる集計で同じ値オブジェクトを使用してもまったく問題はありません。

あなたを助けるかもしれないもう一つの素晴らしい投稿はジミー・ボガードによって書かれました


追加情報の後:

通貨は値オブジェクトとして最もよくモデル化されていると私は言います-それはまだ不変であるように見えます。

Person集計をロードするときは、そのクエリの一部で、プライマリストアの通貨であるCurrencyValueObjectをロードする必要があります。

データベース内の通貨を更新する場合(たとえば、プライマリストアの通貨を変更する場合)、または使用可能な通貨を一覧表示する場合、集計を実行する必要はありません。集計はすべてのデータアクセスに必須ではなく、調整にのみ機能します。管理可能な方法でのエンティティ間の関係。

于 2011-04-16T22:18:26.607 に答える