Я погружаюсь в свои первые набеги с CQRS и Event Sourcing, и у меня есть несколько моментов, по которым я хотел бы получить некоторые рекомендации.Я хотел бы внедрить систему репутации в стиле SO.Кажется, это идеально подходит для этой архитектуры.
В качестве примера приведем SO.Скажем, за вопрос проголосовали, это генерирует UpvoteCommand
, который увеличивает общий балл вопросов и запускает QuestionUpvotedEvent
.
Похоже, что совокупность пользователей автора должна подписаться на QuestionUpvotedEvent
, что может повысить репутациюГол.Но как / когда вы делаете эту подписку мне не понятно?В примере Грега Янгса обработка события / команды подключена в global.asax, но, похоже, это не связано с какой-либо маршрутизацией на основе идентификатора агрегата.
Кажется, что каждый агрегат пользователя будет подписываться на каждый QuestionUpvotedEvent
, что не кажется правильным, чтобы заставить такую схему работать, обработчик событий должен продемонстрировать поведение, чтобы определить, владеет ли этот пользователь вопросом, за который только что проголосовали.Грег Янг подразумевал, что это не должно быть в коде обработчика событий, который должен просто включать изменение состояния.
Что я здесь не так делаю?
Любое руководство высоко ценится.
РЕДАКТИРОВАТЬ
Я предполагаю, что мы говорим здесь о межагрегатном взаимодействии между вопросами и пользовательскими агрегатами.Одно решение, которое я вижу, состоит в том, что на QuestionUpvotedEvent
подписывается ReputationEventHandler
, который может затем извлечь соответствующий пользовательский AR и вызвать соответствующий метод для этого объекта, например YourQuestionWasUpvoted
.Это, в свою очередь, сгенерировало бы специфичное для пользователя событие UserQuestionUpvoted
, тем самым сохраняя возможность воспроизведения в будущем.Это направление в правильном направлении?
РЕДАКТИРОВАТЬ 2
См. Также обсуждение групп Google здесь .