Предполагая проблему домена и следующее определение событий:
UserRegistered(UserId, Name, Email)
UserNameChanged(UserId, Name)
QuestionAsked(UserId, QuestionId, Title, Question)
Предполагая следующее состояние хранилища событий (в порядке появления):
1) UserRegistered(1, "John", "[email protected]")
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? */);
...
}
}
Мой вопрос как я могу найти имя пользователя, кто задал вопрос? Или чаще: как я должен обрабатывать события, если моя денормализованная модель чтения требует дополнительных данных, которых нет в конкретном событии?
Я изучил существующие образцы CQRS, включая SimpleSQRS Грега Янга и Fohjin образец Марка Ниджхофа. Но мне кажется, что они работают только с данными, включенными в события.