Value ObjectとDTO

yyamano2009-05-29

http://d.hatena.ne.jp/aufheben/20090501/1241169897 での id:koichikさんとの議論の続きです。長くなったので、コメント欄で続けるのをやめました。

違和感があろうがなかろうが DDD にはそう書いてあると,自分や DDD 読書会の参加者 (の一部?) はそう解釈しているわけです.
それで違和感があるなら,このエントリの主題のように「DDD の Value Object(3) は Value Object と呼ぶべきではない」と主張すべきであって,DDD に書いてあることを都合よく解釈すべきではないと思います.あるいは,DDD の Value Object(3) が DTO を含まないと解釈するなら,その根拠となる記述を示すべきではないかと.

すみません、議論の仕方がずさんで。ただ、僕はずっと解釈について話しているつもりです。

僕は、Chapter 8 A Model Expressed in Softwareで紹介されているのは全てドメインレイヤのためのビルディングブロックだと解釈しています。ルーズなのは確かですが、話題の中心は常にドメインモデルを構成する要素だと思います。タイトルがそもそもA Model Expressed in Softwareですし、p. 81では

We'll focus on making destinctions among the three patterns of model elements that express the model: ENTITIES, VALUE OBJECTS and SERVICES.

と、この三つの要素がドメインモデルを表現するための要素であると書いています。

p. 97 では Value Objectのidentityの話をするために

Because the most conspicuous objects in a model are usually ENTITIE's identity.

と、まずドメインモデルを構成する要素であるEntityを紹介し、

Analytical effort is required to define meaningful identities and work out foolproof ways to track objects across distributed systems or in database storage.

An Object that represents a descriptive aspect of the domain with no conceputual identity is called a VALUE OBJECT. (p. 98)

と、identiyのないValue Objectという概念がなぜドメインモデルを表現するために必要になるのか説明しています。

ここで分散システムの話が出てきますが、これはDTOとは全く関係ありません。全てのドメインオブジェクトにidentiyを持たせるのは、分散システムやデータベースを使う場合に現実的な解ではないというValue Objectが必要になる理由を説明しているだけでしょう。これは、p. 100の

The economy of copying versus sahring...

で始まる段落からp. 101の前半、そしてp. 102のTuning a Database with Value Objectsで具体的に説明されています。

そして、この後 p. 98、99でとりあげられている例は

  • colors
  • strings
  • numbers
  • window
  • route
  • person, name
  • customer, address

ドメインオブジェクトばかりです。これは、関心の中心がドメインレイヤであることを意味しているからでしょう。

p. 99には

VALUE OBJECTS are often passed as parameters in messages between objects.

とありますが、これは普通にドメインレイヤのValue Objectをメソッドの引数として渡すという、古典的な使い方です。

正直、koichikさんや他のDDD読書会の参加者の方が、どこにDTOの影響を感じているのか、僕は全く理解できていません。なにか根本的な事を見逃しているのでしょうか?