generated at
Event Sourcing
ES
EventのSourcing(永続化)をする
状態を永続化するのではなく、Eventを永続化する
















起きたイベントを全て記録する
タイムトラベルできる
エラーが発生したときにもその直前まで戻ればいい
スモークテストを行いやすい
テストケースと一緒に、行うイベントと結果を用意すれば自動でテストできる

財務、金融、保険などの業界では、最新の状態が知りたいんじゃなくて、行われた手続きが知りたいんだよね、的な



大雑把な構成としてはこのような感じ
>
更新系では、
Commandを元にCommand HandlerがEventsを生成する
Event Storeを介して、
参照系では
Event HandlerがEventを処理してAggregate等を作る
Event Handlerは、Eventをfoldして値を復元する
>
この3つの図だけで知りたいことほぼ知れた感あるmrsekut







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



具体例
commitをEventと捉えるならGit






参考