値オブジェクトはデータベースにどのように保存されますか?
-
21-08-2019 - |
質問
実際に例を見たことはありませんが、データベース内の包含エンティティ テーブル内に保存されていると思います。
つまり。person エンティティ/集計ルートと、対応する person テーブルがあり、それに Address という名前の値オブジェクトがあれば、Address の値はこの Person テーブル内に保存されます。
会社などの他のエンティティがあるドメインにとってそれは意味がありますか?住所があるの?
(私は現在プロジェクト管理アプリケーションを作成しており、DDD を始めようとしています)
解決
まさに説明した理由により、値オブジェクトを別のテーブルに保存しても問題ありません。ただし、エンティティと VO を誤解しているようです。これは永続化に関連した問題ではありません。
以下に例を示します。
次のように仮定します。 会社 そして 人 どちらも同じメールアドレスです 住所. 。次のステートメントのうち、どれが有効であると考えられますか?
- 「company.addressを変更した場合、person.addressにそれらの変更を自動的に取得するようにしたい」
- 「company.addressを変更した場合、それは人に影響を与えてはなりません。アドレス」
もし 1 それは本当です、 住所 であるべきです 実在物, したがって、独自のテーブルがあります
もし 2 それは本当です、 住所 であるべきです 値オブジェクト. 。これは、親エンティティのテーブル内のコンポーネントとして保存することも、独自のテーブルを持つこともできます (データベースの正規化が向上します)。
ご覧のとおり、アドレスがどのように永続化されるかは、エンティティ/VO セマンティクスとは何の関係もありません。
他のヒント
ほとんどの開発者は、最初に何かする前に、データベースに考える傾向にあります。 DDDは、持続性の処理方法を知りません。それはそれに対処するためのリポジトリ次第です。あなたは値オブジェクトは、ドメインに関連する概念である/エンティティ/骨材などなど、XML、SQL、テキストファイルとしてそれを持続することができます。
ビジェイ・パテルによって説明は完璧です。
私は、エリック・エヴァンスの本と一例として優れたdddsampleの貨物事業でDDDを学び始めました。 http://dddsample.sourceforge.net/する
ドメインモデル層で、このニュアンスのコードの実装の違いを実体化したい人(私のような)それらのためので、私が言うます:
overidded方法は、(インタフェースエンティティとValueObjectから)等しいまたは/およびsameIdentityAs / SameValueAs、私が思うに、彼らの表現の場所です。
それはちょうど私のフィーリンです:)
私はこれを読んで面白いと思うすぎます: