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示例。但是我觉得它们只处理包含在事件中的数据。