Value Object の学習メモ
私の Value Object の学習メモ
おれ、アナパタから入ったかも。
DDD
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)
- 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2011/04/09
- メディア: 大型本
- 購入: 19人 クリック: 1,360回
- この商品を含むブログ (131件) を見る
私が、 Value Object について、再考するきっかけになったのは,やっぱりこの本。Entity と Value Object の違いといえば、アイデンティティを持つか持たないか、Value Objectはイミュータブルなど。サンプルだと、「顧客」の中に埋もれていた概念「住所」を Value Object として切り出し、よりドメインを明瞭にするという、ごくごく一般的な例が出てくる。
興味を引きつけたのは、8章のブレークスルーの物語。物語を要約すると、ドメインエキスパートと話が噛み合わない日々が続く。が、やがて、対話を通じて「シェアパイ」という重要概念を探り当てる。「そうそう、それ!」 シェアパイの概念を使った実装に代えるため、(現行スケジュールが遅れているにもかかわらず)マネージャーと交渉し了解を得て、実装する。後日談で、やがて、シェアパイの概念が 営業の人たちにも使われていく話(要約すると味気ないなw)。 実世界 -> ドメインモデルの1方向写像ではなく、ドメインモデル->実世界の逆方向写像の話になっていて、読んでいて、ドキドキする。(著者は渦巻き好きなので、ドメインモデルと実世界は循環して捉えていると推測される。)
この物語の重要概念のシェアパイを探りあてる補助線にあるのが、 Value Object。Supple Design も読んでおくと、Value Object とその周辺で役立つパターン(閉じた操作、副作用のない関数)を理解でき、8章がより楽しく読める。
DDDを読んでいると、Value Objectを使って、重要概念を明瞭にすることに、強いこだわりを感じる。
GOOS
実践テスト駆動開発 (Object Oriented SELECTION)
- 作者: Steve Freeman,Nat Pryce,和智右桂,高木正弘
- 出版社/メーカー: 翔泳社
- 発売日: 2012/09/14
- メディア: 大型本
- 購入: 4人 クリック: 262回
- この商品を含むブログ (31件) を見る
p16 に 値とオブジェクトの話が出てくる。また、p63から、値型を導入するテクニックとして、分解、発芽、包括が出てくる。
私の場合だと、 「String型、int型の基本データ型に執着していないか?重要概念を見落としていなか?」は時々考えるようになった。多分「発芽」に相当するもの。 DDDのシェアパイの話は、分解か包括か区別はわからなかった。
3部のサンプルの中では、最初ベタ書きだったコードを Value Objectを導入してコードをスッキリさせるシーンが何度か出てくる。
好きな文章は p16にある。
これはつまり、私たちはシステムをふたつの「世界」に分けたいということだ。 ひとつは関数的に扱われる値、もうひとつはシステムのステートフルな振る舞いを実装したオブジェクトだ
実践テスト駆動開発は、アランケイが構想した、オブジェクト同士のメッセージのやりとり重要を強調していることから、後者のオブジェクトがメインの語り口であるものの、前者の「値(Value Object)」についてもキチンと取り扱っており、時折出てくる。(関数型言語は、前者の世界を強調するだろう。Value Objectよりももっとうまく世界を表現できるはず。)
TDDの素振り
- ローマ数字の足し算や引き算を素振りする。
- ライフゲームを3回ぐらい解いてみる。4回目は immutable only の縛りで実装してみる。
あたりは、Value Object を再考するきっかけ例題としては良いんじゃなかろうか。
追記
Ruby で実装する場合
class Money < Struct.new(:amount, :currency)
と Structを使う手があることを知った。
別の Moneyの もりもりした実装例を覗いてみるのも手。