面白駆動人生

やっほー

【読書メモ】実践ドメイン駆動設計 ~第6章~ 「値オブジェクト」

前回 【読書メモ】実践ドメイン駆動設計 ~第5章~ 「エンティティ」

What is 「値オブジェクト」

計測・定量化・説明を表現する。 例えば、数字・文字列・日付・時刻、氏名、電話番号など。

値オブジェクトのモデリング

以下の特徴に合致する際、値オブジェクトとしてモデリングする。

  • 何かを計測、定量化、説明する。(計測/定量化/説明)

例) 年齢: 誕生からどれだけ生きてきたのかを計測し、定量化した値。

  • 状態が不変である。(不変性)

  • 組み合わせることで、概念的な統一体を形成する。(概念的な統一体)

例) お金:「額」と「通貨」という属性が組み合わさったもの。
「100」と「ドル」という個別では意味を持たないものが、「100ドル」となり完結した意味を持つ。

  • 計測値、説明が変わった時、全体を完全に置き換えられる。(交換可能性)

例) 通貨の額を変えたい時、新しい「お金」オブジェクトを生成する。

  • 値が等しいか、他のインスタンスと比較できる。(等価性)

値オブジェクトが持つ各属性全ての値が同じか、を判定できること。

  • 振る舞いが、他の概念に対し副作用を及ぼさない。(副作用のない振る舞い)

どのような状態で何度呼び出しても、オブジェクトの状態が変わらない操作。

コンテキスト間の結合をミニマムにする

値オブジェクトを利用することで、下流のコンテキスト側に存在するモデルが管理するプロパティを最小限にすることができる。その結果、複数の境界づけられたコンテキスト間の結合を緩やかにすることができる。

例)
コラボレーションコンテキストの中に、Moderatorが値オブジェクトとして存在。
コラボレーションコンテキストが腐敗防止層から認証・アクセスコンテキストに問い合わせる。
ユーザがモデレータロールを付与されている時、Moderatorオブジェクトを生成する。 f:id:yktm31:20210703173608p:plain

参考

「実践ドメイン駆動設計」から学ぶDDDの実装入門 (WINGSプロジェクト 青木淳夫 著)

以上