以前から言葉としては知っていたけれど、オブジェクト思考の重要な概念に関して。
値オブジェクト(Value Object)
業務上で使われる値を数字や文字列などといったプリミティブ型ではなく、制約を持たせたクラスとして持たせること
例としては会員番号などの業務上特定の意味を持つ文字列や番号などに付けるのが最適
- 型やサイズなど値の判定をインスタンス生成時に行うことができる
- 値の正常性を担保でき、不整合な値などはインスタンス生成時に排除することができる
- 生の値に直でアクセスせず、制約を付けることでイレギュラーな挙動を制御できる
- 業務での関心事とソースの構造の粒度を合わせることができる
- セットした値は基本変更しないことで制約を強くすることができる
- 少し近い概念としてENUMなど
ファーストコレクション(コレクションオブジェクト)
主に計算系の処理(ECでの計算などに関して)に関してその値に対しての処理を1つのクラス内でまとめて処理すること
- データに対する操作に対しての制約を付けることができる
- データに対する操作の責務を一任できる
- コレクションを不変にして外部に渡すことであるクラスの挙動を一任できる
- 外からアクセスできないようにすることで値の有効性を担保できる