ValueObjectが指すものとは?
ValueObjectには複数の意味がある。DDDの文脈に限ると「属性を表現するためのオブジェクトがValueObject」となる。
古のJava界隈
- DTO(Data Transfer Object) = VO(ValueObject)
TDD界隈
- テスト駆動開発 / Kent Beck
- 台数計算や集合、単位を伴う計算、記号計算などを行いたいときにValueObjectを使う
- ValueObjectはImmutable、equalsが必要
- オブジェクトの上書きを防いだり、計算しやすくするために使う
リファクタリング界隈
- リファクタリング / Martin Fowler
- ValueObjectは使用把握が容易で不変だから扱いやすい
- 副作用を気にする必要がない
DDD界隈
- ドメイン駆動設計 / Eric Evans
- あるモデル要素について、その属性しか関心の対象にならないとあれば、その要素を値オブジェクトとして分類すること
- 何らかの属性を表現する場合につかう