ページ一覧を開く

Aggregate内部の変更

Aggregate内部の変更とは

Aggregate内部の変更とは、Aggregate Rootが公開する操作を通して、内部のEntityやValue Objectの状態を更新することです。外部から内部状態を直接書き換えず、Rootが全体のルールを確認します。

Aggregateの外から内部Entityを変更していい?

推奨

内部Entityの変更はAggregate Rootが公開する意図のある操作を経由する。

なぜ

内部Entityだけを見て変更すると、Aggregate全体で守るべき不変条件が破られる可能性があります。

判断基準

  • setterではなく業務上の操作名を使う
  • 変更前にAggregate全体の条件を検証する
  • 内部コレクションを可変で公開しない

BAD

order.getLines()[0].quantity = 100 のように内部状態を直接書き換える。

GOOD

order.changeQuantity(lineId, quantity)で対象行と注文上限を同時に検証する。

図:AGGREGATEの変更経路

外部のユースケース

変更を依頼する

AGGREGATE BOUNDARY

Aggregate Root

不変条件を守る入口

Entity

同一性で追跡する

Value Object

値で等価性を決める

外部は内部オブジェクトを直接変更せず、Aggregate Rootへ意図のある操作を依頼します。Rootが全体のルールを確認してから変更します。