Event Sourcing
ES
状態を永続化するのではなく、Eventを永続化する
起きたイベントを全て記録する
タイムトラベルできる
エラーが発生したときにもその直前まで戻ればいい
テストケースと一緒に、行うイベントと結果を用意すれば自動でテストできる
財務、金融、保険などの業界では、最新の状態が知りたいんじゃなくて、行われた手続きが知りたいんだよね、的な
大雑把な構成としてはこのような感じ
>
更新系では、
参照系では
Event HandlerがEventを処理してAggregate等を作る
Event Handlerは、Eventをfoldして値を復元する
>
この3つの図だけで知りたいことほぼ知れた感ある

ESの問題点
最新の状態を得るためには全てのイベントをリプレイしないといけない
イベントを全て記録するのでストレージを圧迫しそう
仕様変更されたら、大量の過去のイベントにも影響が出る
「特定の名前を検出する」というクエリを実行するとテーブルのフルスキャンをすることになってしまう
>これは読み込みから書き込みを分離して,そのようなクエリでは別途最適化した読み込みモデルを使用するという,CQRSが面白くなってくる部分でもある。ref
具体例
commitをEventと捉えるならGit
参考