集約ルートはミュータブルにするのが正解な気がする
集約
(
集約ルート
、
ルートエンティティ
と呼ぶのか)は
ミュータブル
にするのが扱いやすい。
ドメイン駆動設計
の文脈でいうところの
リポジトリ
をつかった
アプリケーションサービス
の
実装
は次の形になる。
code:kotlin
val something = repository.findBy(id)
something.manipulate()
repository.save(something)
ここで
集約
は状態を変えていることが期待されているはず。最近は
イミュータブル
であることがよしとされているが、これを基本形にするなら
集約
は必然
ミュータブル
である。
「
整合性の担保を集約ルート自身の役割りにしなくてもいい
」では
集約
の状態を
値オブジェクト
(あるいは
構造体
)にすることを考えたが、これとも適合する。
値オブジェクト
(あるいは
構造体
)が
ミュータブル
になっていれば、
テスト
しやすい形になっているので問題なさそう。
すると
集約
は状態を操作するための
ファサード
のような
役割り
をもつことになる。
集約
は情報やデータというよりも、
サービス
としての
役割り
をもつものと考えた方が自然なのではないか?