В настоящее время я начинаю свою первую реальную попытку системы DDD/CQRS/ES после изучения большого количества материала и примеров.Должны ли агрегаторы быть обработчиками событий
1) Я видел примеры сорсинга событий, где заполнители обработчиков событий и их метод Handle для каждого события, что мутирует состояние на экземпляре объекта (они реализовать < типСобытия > интерфейса IHandleEvent для событий, которые мутируют состояние)
2) Я также видел примеры, когда Агрегаты будут просто выглядеть как обычные классические классы Entity, моделирующие домен. Другой класс обработчика событий связан с изменением состояния.
Состояние, конечно же, при сборе агрегата от вызова репозитория, которое получает все предыдущие события для этого агрегата, конечно, мутируется в агрегате обработчиками событий, и когда обработчик команд вызывает методы в совокупности. Хотя в последнем я видел примеры, когда события публикуются в обработчике команд, а не в совокупности, что, я уверен, неверно.
Мой вопрос, каковы плюсы и минусы между методом (1) и (2)
Интересно, как выглядит поток выполнения в подходе 2). Как изменяется состояние отдельного обработчика событий в агрегате?Вам нужно разоблачить все государство? Это делается с помощью метода на агрегате? Каким должно быть имя такого метода, по сравнению с именем метода, вызываемым обработчиком команд и создающим событие? Разве это не надуманно? – guillaume31
В ходе дальнейшего рассмотрения кода примера для 2 и того, что, как я думал, он делает, я пришел к выводу, что это очень странный подход и, как вы говорите, надуманный и чрезмерно спроектированный. Я чувствую, что должен отредактировать вопрос, чтобы просто спросить, является ли подход (1) общим подходом к шаблону источника событий с агрегатами, или есть другой способ, которым я не подвергался? (однако не нужно обсуждать моментальные снимки, поскольку я чувствую, что я понимаю его место, когда это необходимо) –
Я только видел метод 1) до сих пор с функциональными вариантами, где часть поведения обработчика команд переходит в сам агрегат. – guillaume31