私はバリューオブジェクトに関する一般的な質問とあなたのコメントからのより具体的な質問の両方に答えようとしますか?
- ドメインは値オブジェクトを共有できますか?
によって異なります。現在私が働いているシステムでは、15以上の大規模サービスがあり、 "EMailAddress"、 "PhoneNumber"、 "Money"などの値タイプを共有しています。これらのタイプは明確に定義されていますが、 が他の場所で使用されている可能性があるため、実際に使用されているものに共有値タイプを味わっているだけなので、共有しません。共有すると、システム全体の結合の価格を支払うことになります。
- 私は顧客と注文の関係をキーをラッピングする値オブジェクトとして公開しますか?
いいえ、他の人も指摘しているように、顧客は注文ドメインで働いている誰かがデータを知り、データを必要としているということです。 「顧客」と「注文」が2つの異なるドメインを表していると主張する場合、「顧客」ドメインはCRMデータのようなものと想定していますか? 「顧客」とは別に「顧客」と「注文」をモデリングする場合は、「注文」ドメインに必要なデータをドメインに含めることはできません。たとえば、請求先住所を挙げてください。私はタイトカップリングと巨大なオブジェクトグラフに対するあなたの反論を理解していますが、あなたのシステムに複数の "顧客"特権を許可することでこれを処理できます。それぞれの「顧客」は、限定されたコンテキスト内のデータおよび挙動のそれ自身のセットを表す。たとえば、CRMドメインのCustomerエンティティと「Order」ドメインのCustomerエンティティの両方を持つことができます(「オーダー」はカプセル化されたビジネスではないエンティティのように聞こえるため、実際にオーダードメインと推測します)プロセス)。お客様のCRMドメインでは、顧客は確かに注文を受け取り、請求先住所などのようなものを「注文」ドメインに入れるなど、顧客は電話番号、連絡先、郵便住所などのようなものを持っている可能性があります)あなた自身のドメインに入れて注文との関係を取り除く顧客を作成しないでください。あなたはオブジェクトグラフのサイズを減らすだけです。
あなたがエンティティを参照しているドメインを言うときのように見えます。問題は明確ではない、私は実装の詳細と概念設計を混在させていると思う。オーダーと顧客との間に取引関係がある場合は、その関係をファーストクラスの市民としてモデル化します。 – JuanZe
いいえ私は実体や集合体を指していませんでした。私は別のドメインを指していました。同じエンティティが同じ値のオブジェクト型を共有できるという単純な答えで、同じ質問をそこに適用することもできます。私の見解では、密接に結合した1つのドメインで大きなビジネスをモデル化することはできません。エンティティは何らかの関係を持っているからといって、私の世界で一流の市民であってはいけません。そのドメインモデルは、時間が経つにつれて発展する獣となるでしょう。 – Glenn
どのように顧客と注文を分けることができますか?一つは他のものなしでは意味をなさない。顧客なしで注文することはできますか?そうでない場合、どのようにして同じドメインに属していないのでしょうか? – Dan