State Sourcing(CRUD)
なら以下のようなイメージ。まぁ普通によく見るロジック。
class AddCartItemCommandProcessorOnSS(cartRepository: CartRepository) {
def execute(cartId: CartId, itemId: ItemId, num: ItemNum): Unit = {
// 最新の集約(グローバルなエンティティ)をストレージから取得する
val cart = cartRepository.findById(cartId)
// ロジック実行: 予算超過ならカートオブジェクトが商品の追加を拒否する! (1)
val newCart = cart.addItem(itemId, num)