2009-03-24 26 views
43

私は実際の例は見ていませんが、データベース内の包含エンティティテーブル内に保存されていると仮定します。バリューオブジェクトはどのようにデータベースに格納されていますか?

e。 Personエンティティ/集約ルートとそれに対応するPersonテーブルがある場合、AddressオブジェクトのValueオブジェクトがあれば、このPersonテーブル内にAddress値が保存されます。

住所などの会社などの他のエンティティがあるドメインには意味がありますか?

(私は現在、プロジェクト管理アプリケーションを作成し、DDDに取得しようとしている)

答えて

84

それはあなたが説明してきた非常に理由のために、別のテーブルに値のオブジェクトを格納するために大丈夫です。しかし、Entities vs VOsを誤解していると思います。これは永続性に関わる問題ではありません。

はここに例を示します

会社両方が同じメールアドレス を持っていると仮定します。これらのうちどれが有効であると考えていますか?

  1. "私はCompany.Addressを変更する場合、それは がperson.addressで影響を及ぼしてはならない"
"私はCompany.Addressを変更した場合、私は person.addressでは、自動的に それらの変更を取得したいです"

住所エンティティ、あること、したがって、それはOのしている必要があり、真実である場合WNの表は、

、がtrueの場合住所バリューオブジェクトでなければなりません。親エンティティのテーブル内にコンポーネントとして格納することも、独自のテーブルを持つこともできます(データベースの正規化が向上します)。

Addressがどのように保持されるかは、Entity/VOセマンティクスとは関係ありません。

7

ほとんどの開発者は、データベースの中で何よりも先に考える傾向があります。 DDDは、永続性の処理方法を知らない。それはそれに対処するためのリポジトリまでです。 XML、SQL、テキストファイルなどとして永続化することができます。エンティティ/集約/値オブジェクトは、ドメインに関連する概念です。

ビジェイ・パテルによる解説は完璧です。

2

私はEric Evansの本と優れたdddsample Cargoプロジェクトを例としてDDDを学び始めました。ドメインモデルの層で、このニュアンスのコードの実装の違いを実体化したい人(私のような)にとってはそう

http://dddsample.sourceforge.net/は、私が言う:

overiddedメソッドEqualsまたは/およびsameIdentityAs/SameValueAs(インタフェースEntityとValueObjectから)は、その表現の場所だと思います。

それは私もこれを読んで面白いと思うちょうど私のフィーリン:)

です:

http://martinfowler.com/bliki/ValueObject.html