ミュータブル、イミュータブル - 要求分析駆動設計
参考書籍一覧(Amazon アソシエイトリンク)
UseCase、Rule、ValueObject、State、Eventのいずれもイミュータブルなクラスとして設計する。
コード例ではpublicなattr_accessor
を使っているので、実装上イミュータブルにはなっていないが、イミュータブルなクラスとして扱う。気になるなら、イミュータブルになるように実装すれば良い。
Eventと組み合わせる部分を除いて、参照用のEntityもイミュータブルなクラスとして設計する。
なので、ミュータブルなクラスとして存在するのは、永続化用のEntityだけということになる。ImmutableEntityとMutableEntityのように呼び分けても良いかも知れない。