PoEAA ch18 Value Object
Value Object
A small simple object, like money or a date range,
whose equality isn't based on identity.
- 参照オブジェクトと値オブジェクトを区別することは有用
- Value Objectは普通のオブジェクトと比べて...
- 小さい
- プリミティブ型に似ている
How It Works
- 参照オブジェクトとの明確な線引きは難しい
- ふわっとした区別: 大きさ
- 明確な違い: 等価性
- Value Objectがいくつインスタンシエートされているか意識する必要はない
- 2つのValue Objectがメモリ上で同一の実体だろうが異なる実体だろうが等価判定できる
- immutableにするのはよいアイデア
- 永続化するときは、それ単体でテーブルを作らない
- 【補】他のValue Objectやプリミティブ型と一緒にドメインオブジェクトを構成し、それに対応する表に永続化する
- バイナリのシリアライズ処理を大量に行う場合、性能のボトルネックになることも
- MoneyはValue Objectの一種
.NET Implementation
- .NETでは、Value Objectを第一級オブジェクトとしてサポートする
- 【wiki】生成、代入、演算、(引数・戻り値としての)受け渡しといったその言語における基本的な操作を制限なしに使用できる対象のこと
class
の代わりにstruct
で宣言することで値扱いになる
When to Use It
- identityではなくフィールドすべての値による等価判定を行いたい場合
- 構築が簡単な小さいオブジェクトは検討の価値あり