2012-01-12 16 views
2

システム内に2つのドメイン、OrderdomainとCustomerdomainがあるとします。ドメイン間で値オブジェクトを共有することをお勧めしますか?

どちらのドメインもかなり複雑で大規模なので、それらを1つのドメインにマージすることはオプションではありません。

しかし、それらの間にビジネス関係があります。各オーダーで顧客はオーダーラーとして行動します。

私には少なくとも3つの解決策があります。

  1. OrderとCustomerの両方にcustomerTypeをプリミティブ型として格納します。

  2. 2つの値オブジェクトOrderDomain.CustomerIdとCustomerDomain.CustomerIdを作成します。これらの型の型が等しいかどうかを比較できることを確認してください。

  3. valeobjectのCustomerIdと第三成分「SharedValueObjects」を作成し、どちらが好ましいか、など、より良いものに考え出すことができますか?両方のドメインで

を、そのタイプを使用しますか

+1

あなたがエンティティを参照しているドメインを言うときのように見えます。問題は明確ではない、私は実装の詳細と概念設計を混在させていると思う。オーダーと顧客との間に取引関係がある場合は、その関係をファーストクラスの市民としてモデル化します。 – JuanZe

+0

いいえ私は実体や集合体を指していませんでした。私は別のドメインを指していました。同じエンティティが同じ値のオブジェクト型を共有できるという単純な答えで、同じ質問をそこに適用することもできます。私の見解では、密接に結合した1つのドメインで大きなビジネスをモデル化することはできません。エンティティは何らかの関係を持っているからといって、私の世界で一流の市民であってはいけません。そのドメインモデルは、時間が経つにつれて発展する獣となるでしょう。 – Glenn

+2

どのように顧客と注文を分けることができますか?一つは他のものなしでは意味をなさない。顧客なしで注文することはできますか?そうでない場合、どのようにして同じドメインに属していないのでしょうか? – Dan

答えて

4

私はバリューオブジェクトに関する一般的な質問とあなたのコメントからのより具体的な質問の両方に答えようとしますか?

  1. ドメインは値オブジェクトを共有できますか?

によって異なります。現在私が働いているシステムでは、15以上の大規模サービスがあり、 "EMailAddress"、 "PhoneNumber"、 "Money"などの値タイプを共有しています。これらのタイプは明確に定義されていますが、 が他の場所で使用されている可能性があるため、実際に使用されているものに共有値タイプを味わっているだけなので、共有しません。共有すると、システム全体の結合の価格を支払うことになります。

  1. 私は顧客と注文の関係をキーをラッピングする値オブジェクトとして公開しますか?

いいえ、他の人も指摘しているように、顧客は注文ドメインで働いている誰かがデータを知り、データを必要としているということです。 「顧客」と「注文」が2つの異なるドメインを表していると主張する場合、「顧客」ドメインはCRMデータのようなものと想定していますか? 「顧客」とは別に「顧客」と「注文」をモデリングする場合は、「注文」ドメインに必要なデータをドメインに含めることはできません。たとえば、請求先住所を挙げてください。私はタイトカップリングと巨大なオブジェクトグラフに対するあなたの反論を理解していますが、あなたのシステムに複数の "顧客"特権を許可することでこれを処理できます。それぞれの「顧客」は、限定されたコンテキスト内のデータおよび挙動のそれ自身のセットを表す。たとえば、CRMドメインのCustomerエンティティと「Order」ドメインのCustomerエンティティの両方を持つことができます(「オーダー」はカプセル化されたビジネスではないエンティティのように聞こえるため、実際にオーダードメインと推測します)プロセス)。お客様のCRMドメインでは、顧客は確かに注文を受け取り、請求先住所などのようなものを「注文」ドメインに入れるなど、顧客は電話番号、連絡先、郵便住所などのようなものを持っている可能性があります)あなた自身のドメインに入れて注文との関係を取り除く顧客を作成しないでください。あなたはオブジェクトグラフのサイズを減らすだけです。

+0

両方のドメインで必要とされる顧客情報、たとえば「顧客名」はどこに保管しますか? – aycanadal

+1

両方のドメインで顧客名が同じですか?たとえば、顧客の名前を変更した場合、以前の注文に変更が反映されていれば表示されますか?私はドメインの違いを探して、両方のドメインの名前をモデル化しようとします。注:レポートまたはビューのデータを使用しても、両方のドメインのデータを複製する必要があるわけではありません。また、サービス境界が悪いことを示す可能性もあります。 – Marius

+0

同じであればどこでも変わるはずです。タイプミスを修正するときなど、他の理由で? – aycanadal

関連する問題