2011-10-17 11 views
2

私はDDの世界で始まり、簡単なアプリケーションを構築しようとしています。ドメインをモデル化する方法についていくつか質問があります。以下のシナリオをモデル化する最良の方法

私のアプリケーションでは、ユーザーはグリーティングカードを注文できます。 ユーザーは、1つの順序で任意の数のカードを発注できます。 注文するカードを選択するときは、カードカタログを閲覧します。ただし、カードカタログはローカルシステムに保存されておらず、外部システムから取得されますが、現在のセッションで閲覧したカードは、オーダーに追加する場合に備えて、そのセッションの存続期間中データベースにローカルにキャッシュされます。

カードを注文に追加すると、新しい注文の広告申込情報が作成されます。次に、注文明細、色、挨拶などの他の詳細を指定する必要があります。

私の質問は 私のドメインでカードをモデル化するにはどうすればいいですか?私は集計ルートとして多くのオーダー明細を持つOrderを持っています。各オーダー明細には特定の属性とカードが含まれます。

しかし、私のカードカタログには、注文した広告申込情報のカードと同じプロパティを持つカードコンセプトもあります。

これらのカードを2つの別個のエンティティ(CatalogueCardとOrderCard)としてモデリングするのは、同じプロパティセットを持っていても正しいですか?

カードがアドレス指定されなければならない住所(各注文明細には住所がある)とその注文の請求先住所についても同様の質問が出される可能性があります。これらは完全な独立したエンティティとしてモデル化されるべきですか?事前

答えて

1

おかげで、あなたがあなたのドメインをモデルとして繰り返しビジネスエンティティの概念を見ているという事実は、あなたが正しい軌道に乗って、おそらくしていることを意味します。しかし、同じ属性セットを持つ2つのオブジェクトがある場合は、間違いなくただ1つを使用する必要があります。 CatalogueCardとOrderCardは、クラス名ではなくインスタンス名でなければなりません。変更が必要な場合を除き、基本カードクラスから継承できます。あなたのアドレスクラスにも同じです。ただ1つのアドレスクラスを使用してください。アドレス型は、モデルがサポートするアドレス型の列挙型の値である別の属性でなければなりません。

+0

ご返信ありがとうございます。カードの動作が異なる場合はどうなりますか?たとえば、CatalogueCardがCardThemesと1対多の関係を持っていたとしますが、OrderCardにはCardThemeが1つしかない場合があります。つまり、ユーザーは注文に対して1つのテーマを選択する必要があります。 OrderCardがCardThemeとの独自の関係でそれを継承してBaseCardとしてモデル化しますか?私はアドレスが違うので、アドレスは実際に値オブジェクトであると思います。もう一度おねがいします – user933709

+0

私はそれをビジネスルールではなくビジネスルールと呼びますが、継承はそれを処理する良い方法です。しかし、あなたの例では、1つのテーマが同じデータ構造(コレクション/配列)を使い、単純に1つの要素に制約されるため、実際には非常に簡単です。この例では、Card-derivedクラスは制約の点でのみ異なります。 –

関連する問題