Slide 35
Slide 35 text
ESモデル(2)
スナップショットでイベントをショートカットする
ロックのために集約本体と追記イベントを同一Txで保存する
リクエスト毎に余分なI/Oオーバーヘッドがかかる…
class AddCartItemUseCase {
void execute(CartId cartId, ItemId itemId, ItemNum num) {
// 最新のスナップショットを読み込む
var snapshot = cartEventRepository.findLastestSnapshotById(cartId);
// 差分イベントを読み込む
var events = cartEventRepository.findAllEventsById(
cartId, snapshot.sequenceNumber
);
var cart = Cart.formEvents(snapshot, events); // リプレイ
// ドメインロジックを呼び出す
var newCartWithItemAdd = cart.addItem(itemId, num);
// スナップショット保存&イベント追記
cartEventRepository.storeSnapshotWithEvent(
newCartWithItemAdd.cart, newCartWithItemAdd.event
);
}
}
35