値オブジェクトについて
汎用的な値オブジェクトについて
- typeに属する汎用的な値オブジェクトはロジックを1箇所にまとめられて便利だと思いました。
(例)Date型やAmount型など
typeに属する汎用的な値オブジェクトとして作るのは、おおよそロジックに変更がないと分かりきったものだけに限るべきだと思いました。
なぜなら、汎用的な値オブジェクトは様々な箇所から利用されるため、変更に弱くなると感じたからです。以下、囲い部分そう思ったエピソードです(笑)
僕は汎用的な型にする想定でEmailAddressという型の値オブジェクトを作りました。 この値オブジェクトは会員に関する機能や管理者に関する機能など様々な場所で利用されました。 時間も経過し、いざ全体的に見直してみるとたくさんの機能がこの値オブジェクトに依存していました。 この値オブジェクトに変更があった場合は、依存している機能に悪影響がないか全てを検証しなければいけないと考えるとすごく大変だと思いました。。。
ドメイン固有の値オブジェクトについて
- 汎用的な値オブジェクトに当てはまらない場合はドメイン固有の値オブジェクトにしてmodelに属させた方が良さそうだと思いました。
(例)MemberEmailAddress型など
なぜなら、ドメイン固有の値オブジェクトはそのドメインオブジェクトに関する箇所でしか利用されないため、変更に強くなると感じたからです。