Предполагается, что проблема домена переполнения стека и следующее определение событий:
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? */);
...
}
}
Мой вопрос как я могу найти имя пользователя , который задал вопрос?Или более распространенный: как мне обрабатывать события, если моя денормализованная модель чтения требует дополнительных данных, которых нет в конкретном событии?
Я исследовал существующие образцы CQRS, включая SimpleSQRS ГрегаМолодой и Фохин образец Марка Нийхофа.Но мне кажется, что они оперируют только данными, включенными в события.