スタック オーバーフロー ドメインの問題と、次のイベントの定義を想定します。
UserRegistered(UserId, Name, Email)
UserNameChanged(UserId, Name)
QuestionAsked(UserId, QuestionId, Title, Question)
イベント ストアの状態を次のように仮定します (出現順)。
1) UserRegistered(1, "John", "john@gmail.com")
2) UserNameChanged(1, "SuperJohn")
3) UserNameChanged(1, "John007")
4) QuestionAsked(1, 1, "Help!", "Please!")
質問リスト (SO の最初のページ) の次の非正規化読み取りモデルを想定します。
QuestionItem(UserId, QuestionId, QuestionTitle, Question, UserName)
そして、次のイベント ハンドラー (非正規化された読み取りモデルを構築します):
public class QuestionEventsHandler
{
public void Handle(QuestionAsked question)
{
var item = new QuestionItem(
question.UserId,
question.QuestionId,
question.Title,
question.Question,
??? /* how should i get name of the user? */);
...
}
}
私の質問は、質問をしたユーザーの名前を見つけるにはどうすればよいですか? または、より一般的な: 非正規化された読み取りモデルが特定のイベントに存在しない追加データを必要とする場合、イベントをどのように処理すればよいですか?
Greg Young の SimpleSQRS やMark Nijhof のFohjinサンプルなど、 CQRSの既存のサンプルを調べました。しかし、それらはイベントに含まれるデータのみで動作しているように思えます。