Slide 22
Slide 22 text
パフォーマンスとスケーラビリティ
(3/3)
保存されたイベント列から最新状態を得るには、イベント列を状態変更のメソッドに渡すだけでよい。しかし自前での実
装はいろいろ面倒
//
関数型ではfold
の中でイベントに応じたコマンドを実行するだけ
case class WalletImpl(events: WalletEvents,
snapshotBalance: Money = Money.zero(Money.JPY) //
イベント列が長大なときのショートカット!
) extends Wallet {
//
イベントから最新状態を導出(
しかも、状態をlazy loading
できるとは!)
override lazy val balance: Money = {
events.foldLeft(snapshotBalance) {
case (r, MoneyDeposited(_, _, _, _, _, money, _)) =>
r.plus(money)
case (r, MoneyPaid(_, _, _, _, _, money, _, _)) =>
r.minus(money)
case (r, MoneyPaymentReceived(_, _, _, _, _, money, _, _)) =>
r.plus(money)
case (r, _) =>
r
}
}
}
QRS+ES(
再)
入門
突撃!!
隣のアーキテクチャ 22 / 38