2

値オブジェクトはどのようにデータベースに保存されますか? :

Company と Person の両方が同じメール アドレスを持っているとします。これらのステートメントのうち、有効と考えるものはどれですか?

   1.「Company.Address を変更した場合、Person.Address にそれらの変更を自動的に取得させたい」

   2.「Company.Address を変更しても、Person.Address に影響を与えてはなりません」

1 が true の場合、Address はエンティティである必要があります

2 が true の場合、Address は値オブジェクトである必要があります。

上記のモデルでは、メールAddressValue ObjectCompanyにするべきではありませんか?同じメールがあったとしてもPerson、このメールにはまだ概念的なアイデンティティがないからです。

つまり、最初にinitial.address@gmail.comCompanyPerson共有し、その後new.address@gmail.comで新しいメールを取得した場合、代わりにメール アドレス initial.address@gmail.com自体は変更されていないと主張できます。 new.address@gmail.comに置き換えましたか?CompanyPerson

したがって、私の理解では、共有されている単なる事実Addressは、それに個性 (つまりアイデンティティー) を与えるのに十分ではありませんか?!

ありがとうございました

4

3 に答える 3

7

はい、あなたの理解は正しいです。ほとんどのドメインでは、アドレスは単なる値であるため、ほとんどの場合、アドレスは値オブジェクトである必要があります。

現在、会社個人の住所が同じであるという事実は、一方が変更された場合に他方も変更される必要があるという意味ではありません。このような関係が存在する場合は、 Addressをエンティティにするのではなく、明示的な制約によってモデル化する必要があります。

Eric Evans は、ドメイン駆動設計に関する彼の優れた著書でこれについて述べており、 Addressがエンティティである可能性がある特定の例 (郵便サービス、そのドメインは住所を中心に展開し、個々の住所の識別が重要な場合) を提供しています。

于 2012-07-12T05:21:57.097 に答える
1

これは、コンテキストから何かを取り出す典型的なケースです。

元の質問 (値オブジェクトはデータベースにどのように保存されているか) は、モデルの有効性を疑問視するものではなく、私の例でもこれらの問題を強調するものではありませんでした。私の答えはPersistence vs Entity/VOについてでした。

CustomerPerson、およびの例をAddress純粋に使用して、同じユビキタス言語を OP と共有できるようにしました (より良い例を考える時間がありませんでした)。

私はこれに関するカサブランカのアドバイスに従います(賛成)

于 2012-07-13T09:07:08.107 に答える
1

実際、メールは概念的なアイデンティティがあります。問題は、実際には電子メール アドレスをモデル化しているのではなく、個人の連絡先情報や会社の連絡先情報をモデル化していることです。トピックを続けると、値オブジェクトと ID オブジェクトは、「絶対的な真実」というよりも実装上の決定です。

不変の値オブジェクトを使用して、システムに「アドレス a をアドレス b に変更する」ように指示すると、個人と会社の両方でアドレス A のすべてのインスタンスを検索し、アドレス b を指すように更新します。(または、そのうちの 1 つだけを更新することもできます)。

値のない連絡先情報オブジェクトを使用すると、より強力になります。と:

Contact Information
{
    string email;
}

実際には、個人と会社の両方が同じ連絡先情報オブジェクトを指している可能性があるため、一方を更新すると他方も更新されます。または、それぞれが異なる連絡先情報オブジェクトを指すようにすることもできます。これにより、一方を更新しても他方を変更しません...

ところで: 電子メールには概念的な同一性があります。なぜなら、電子メール アドレスの変更は、実際には先週 Google が私にしたことであり、私の電子メール アドレスの末尾が @googlemail.com から @gmail.com に変更されたからです...誰かが私と私の会社の両方に私の電子メールを持っていた場合、1 回の更新で両方のインスタンスが変更されるだけです。その場合、私の電子メール アドレスが自動的に変更されるためです... 一方、別の電子メールを使用し始めた場合アドレス、連絡先情報の変更点... 私の古い電子メール アドレスはまだ存在し、同じです。

私のアドバイスは、何らかの理由 (数値、文字列など) で値オブジェクトとしての使用を最適化したいドメインの非常に適切なオブジェクトでない限り、すべてを ID でモデル化することです。ただし、これは通常、実装上の決定であり、ドメインに関するものではないことに注意してください。

于 2012-07-11T21:49:16.187 に答える