イベント・ソーシングを知る
- 3. 例: 本のレンタルサービス
1. ユーザが本を登録する
2. 本はユーザなら誰でも借りられる
3. 本を借りた人が本を返す
4. 本がまた借りられるようになる(2に戻る)
- 5. たぶんこうなる
本テーブル的なもの
タイトル 貸し出し
ONE PIECE
NARUTO
- 9. たぶんこうなる
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER ケニーが借り出し中
- 11. ステート・ソーシング
• 従来の一般的な考え方
• ステート=状態
• 状態中心のソフトウェア設計
• あらゆる情報は状態が永続化される
• 最新の状態を常に記憶しておくのが一般
的
- 17. ほんとにそのまま記録します
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
このままです
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER ケニーが借り出し中
- 20. イベントを再生する順番に辿ります
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
記録されているイベン
タイトル 貸し出し ト
ONE PIECE
NARUTO
- 21. イベントを再生する
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER
- 22. イベントを再生する
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER カイルが借り出し中
- 23. イベントを再生する
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER
- 24. イベントを再生する
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER ケニーが借り出し中
- 25. イベントを再生する
1. スタンが「HUNTER×HUNTER」を登録
2. カイルが「HUNTER×HUNTER」を借りる
3. カイルが「HUNTER×HUNTER」を返す
4. ケニーが「HUNTER×HUNTER」を借りる
最新の状態が再現
タイトル 貸し出し
ONE PIECE
NARUTO
HUNTER×HUNTER ケニーが借り出し中
- 26. イベント・ソーシングのすごいと
ころ
• ソフトウェアの完全な履歴が手に入る
• ソフトウェアの任意の部分あるいは全体
を「ある時点」に簡単に再現できる
• 有用な設計と相性が良い
– ドメイン駆動設計(DDD)
– コマンドクエリ責務分離(CQRS)
- 33. 参考
• Greg Young流CQRS - Mark Nijhof
• Why Event Sourcing?
• Event Sourcing and CQRS, Let's use it.
• state ソーシング、 event ソーシング 【ス
タイルの選択肢】
• event とメッセージング 【きっと、良い
パターン】