Slide 36
Slide 36 text
2019/1/19 localhost:4100/presentation.html#1
http://localhost:4100/presentation.html#1 36/53
イベントから状態を導出する
すべてのドメインイベントがコンストラクタに渡される。イベント列が大きいと導出の計算コストも大きくなる
必ずしもすべてのイベント列が必要ではない場合、最新のスナップショット+差分ドメインイベントの集合でよくなる
case class WalletImpl(events: WalletEvents, snapshotBalance: Money = Money.zero(Money.JPY)) extends Wallet {
override lazy val id: WalletEventId = events.walletId
override lazy val contractId: ContractId = events.contractId
override lazy val userAccountId: UserAccountId = events.userAccountId
override lazy val createdAt: Timestamp = events.createdAt
override lazy val balance: Money = {
// FIXME:
events.breachEncapsulationOfEvents.reverse.foldLeft(snapshotBalanace) {
case (r, MoneyDeposited(_, _, _, _, _, money, _)) =>
r.plus(money)
case (r, MoneyPaid(_, _, _, _, _, money, _, _)) =>
r.minus(money)
case (r, MoneyPaymentReceived(_, _, _, _, _, money, _, _)) =>
r.plus(money)
case (r, _) =>
r
}
}
// ...
}
Scala
コードとともに考えるドメインモデリング
Scala
福岡 2019 36 / 53