イベントストアとしてイベントソーシングを使用し、「レポートストア」として単純な(No)SQLストアを使用するいくつかのCQRSサンプル実装(Java / .Net)を調査しました。
すべて良さそうに見えますが、すべてのサンプル実装で何かが欠けているようです。
アプリケーションが本番環境に移行した後、新しいレポートストア/画面の追加を処理するにはどうすればよいですか?また、既存の(最新の)データをイベントストアから新しいレポートストアにインポートする方法は?
すなわち:
基本的なDDD/CQRS駆動のCRMアプリケーションを想像してみてください。すべての画面(実際に表示)には、独自の構造化レポートストア(SQLテーブル)があります。これらのビューはすべて、ドメインイベント(CustomerCreated / CustomerHasMovedなど)をリッスンするハンドラーを使用して更新されます。
CRMの機能の1つは、通話をログに記録できることです(PhoneCallLoggedイベント)。時間の制約により、CRMのV1でのみ通話のログ記録を実装しました(V2で実装される通話を誰が処理したかを表示および報告します)
本番環境でしばらく実行した後、顧客および営業担当者ごとにログに記録された電話の「レポート」を実装したいと考えています。
したがって、いくつかの画面(ビュー)とサポートするレポートテーブル(レポートストア内)を追加し、イベントストアですでに収集されているデータを入力する必要があります...
それは私が研究したサンプルを見ている間私が立ち往生しているところです。イベントストアから(新しい)レポートストアへの既存の(履歴)データのインポートは処理しません。
EventRepository(DomainRepository)のすべてのサンプルには、メソッド「GetById」と「Add」のみがあり、新しいレポートテーブルに入力するためにすべての集計ルートを一度に取得することはサポートされていません。
この初期データのインポートがないと、新しい画面は新しく発生したイベントに対してのみ更新されます。すでにログに記録された通話ではありません(PhoneCallLoggedイベントのレポートリスナーがなかったため)
何か提案、推奨事項はありますか?
前もって感謝します、
レムコ