ミュータブル、イミュータブル - 要求分析駆動設計

UseCase、Rule、ValueObject、State、Eventのいずれもイミュータブルなクラスとして設計する。 コード例ではpublicなattr_accessorを使っているので、実装上イミュータブルにはなっていないが、イミュータブルなクラスとして扱う。気になるなら、イミュータブルになるように実装すれば良い。 Eventと組み合わせる部分を除いて、参照用のEntityもイミュータブルなクラスとして設計する。 なので、ミュータブルなクラスとして存在するのは、永続化用のEntityだけということになる。ImmutableEntityとMutableEntityのように呼び分けても良いかも知れない。