<< ドメイン駆動設計 :どこまで実践できている? | main | ドメインオブジェクトの複雑な参照関係を扱うパターン >>

DDDの Entities パターンと Value Objects パターンを理解する

ドメイン駆動設計の基本が、Entities パターンとValue Objects パターン。

本を読んでも、なぜ、これが基本になっているのか、最初はピンとこなかった。

私はこういうふうに理解した、という話し。

name-value ペア


ソフトウェアの世界では、name-value ペアをいろいろ使う。

NAME=値

の形式。 "=" は、タブのこともあれば、":" のこともある。

XML が一般的になる前は、設定ファイルといえば、これ一辺倒だった。
HTTPのリクエストとか、SMTP のメールヘッダーとかもそう。


Amazon の SimpleDB なんかもそうですね。

Java の Map は、 key-value ペアを扱うコレクション。これも、name-value ペアといっしょですね。

こういう情報の扱い方は、なじみが深いし、なにも考えずに使っていますよね。

これが、そのまま、 Entity と Value Object の関係なんです。

Name : Value
Key  : Value
 ↓   ↓
Entity : Value Object

Entity が識別情報で、Value Object が、説明情報という感じが、なんとなくわかりますか?

・name や key 役のオブジェクトが、Entity (識別オブジェクト)。
・value 役のオブジェクトが、Value Object (説明オブジェクト)。

・参照のキーになるのが、Entity。
・参照される内容が、 Value Object。

で、"=" とか ":" が、オブジェクトの「関連」になる。

name-value ペアよりは、ちょっと複雑になるけど、考え方や役割はいっしょ。

Entity は、name, key など、内容を参照するための情報
Value Object は、内容を説明する値。

Entity の空間 ( name や key の空間 ) と、Value Object の空間 ( value の空間 ) を、区別して、モデリング、設計・実装しましょう、ということ。

これが、ドメイン駆動設計の基本、Entities パターンと Value Object パターンなんですね。

Java 風に記述すると、

Map<Entity,Set<Value Object>> ドメインオブジェクト空間;

という感じ。

わかりづらいか...

データモデリング


データモデリングの考え方も、実は同じ構造。

データモデリング、データ項目を、識別子 と 属性 に分けて考える。

情報(データのカタマリ)を扱う場合に、

・識別に使う情報
・内容を表す情報

に分けて考える。

DDD の Entities パターン と Value Object パターンの議論も、これとまったくいっしょの考え方ですね。

DDD の説明だと、正直ぴんとこなかったけど、name-value ペアとか、データモデリングの 識別子/属性 と同じなんだと気がつけば、理解も簡単でしょう。

サロゲート(代理)キーではなくナチュラル(自然)キー


注意点。

データモデリングの識別子と、テーブル設計の主キー設計、それも、シーケンスなどを使った、人工的な サロゲートキーの視点を明確にわけること。

ドメイン駆動設計やデータモデリングの「識別」は、ビジネスの現場で使われている情報の話し。
つまり、ナチュラルキーが、関心事。

name-value ペアの name や、 Map の key も、できるだけ、ビジネスで意味のある言葉にするのが、ドメイン駆動設計。

ドメイン駆動設計の視点と、実装技術の視点は、意識して使い分けましょう。

コメント
コメントする









この記事のトラックバックURL
トラックバック
calendar
   1234
567891011
12131415161718
19202122232425
262728293031 
<< July 2020 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM