みなさんもそろそろ牛丼に飽きて、海鮮丼が食べたくなった頃だろうか?
もらえるかはわからないけれどアンサーソングを待たずに、個人的なメモだと書いてある記事に言及するのは無粋かもしれない。しかし、どうしても気になってしまい見過ごせない記述があったのでこれを書くことにした。
気になったのは Learning Domain-Driven Design のバリューオブジェクトについての要約部分についてだ。
かとじゅんさんは同書の Chapter 6. Tackling Complex Business Logic をもとに、次のような感想を書いている。
まず気になるのが、ドメインモデルとドメインオブジェクトが同一であるかのような記述だ。しかし、ドメインオブジェクト(Domain Object) という用語はこのチャプターに登場しない。
この感想へ至る根拠として、次のようなチャプター内の記述を参照している。(日本語訳はかとじゅんさんの記事のものではなく、僕の手による抄訳)
少なくとも、これらの引用部分では、バリューオブジェクトはドメインオブジェクトであると示されていない。バリューオブジェクトがドメインモデルのビルディングブロックの一つであると記述にとどまっている。
そして、かとじゅんさんのメモでは参照されていないが、このチャプターでは次のようにバリューオブジェクトについても、きっちりと説明されている。
かとじゅんさんがこの記述を見逃したのか、あえて記述しなかったのかは分からないが、バリューオブジェクトがオブジェクトが持つ値によって識別されることが説明されている。その実例として、DDD本の例にもある色オブジェクトの実装の説明が続いている。
また、チャプターの最後の Conclustion にも次のようにな記述がある。
こちらの説明は先程のものよりもモデリングとしての側面が強いが、どちらもPofEAAと同じように、IDに基づかない値による識別が行われる不変なオブジェクトをバリューオブジェクトと呼んでいることがわかる。
このチャプターの冒頭の History というセクションにあったDDDとPofEAAの関連性についての大変興味深い記述があったので合わせて紹介しよう。
PofEAAの著者のMartin Fowler氏が最初に世に紹介したドメインモデルというパターンがあり、PofEAAで紹介されたドメインパターンの構築に関して、Eric Evans氏がエリック・エヴァンスのドメイン駆動設計という著書を執筆したという歴史がここには記されている。つまり、PofEAAというデザインパターン集をもとに、DDDはPofEAAののパターンを利用した設計手法として書かれた。ここからDDDのドメインモデルがPofEAAで紹介されたものと同じものであり、ドメインモデルのビルディングブロックとなるバリューオブジェクトも、PofEAAと同じものであることは想像に難くない。
繰り返しになるが、DDDのバリューオブジェクトがドメインオブジェクトの一種だという事実はこのチャプターには直接的には書かれていない。ドメインオブジェクトという単語も扱われていない。さまざまなDDDの本からどれだけ事実を収集しても、既にある用語の意味を変更することが難しいことだけがわかる。