В настоящее время я начинаю свою первую настоящую попытку создания системы DDD / CQRS / ES после изучения большого количества материала и примеров.
1) Я видел примеры источников событий, в которых агрегаты являются обработчиками событий, а их метод Handle для каждого события - это то, что изменяет состояние экземпляра объекта (они реализуют интерфейс IHandleEvent ‹EventType› для событий, которые могут изменять состояние)
2) Я также видел примеры, в которых агрегаты выглядели бы как простые классические классы сущностей, моделирующие предметную область. Другой класс обработчика событий участвует в изменении состояния.
Конечно, состояние изменяется на агрегате обработчиками событий в обоих случаях при перестроении агрегата из вызова репозитория, который получает все предыдущие события для этого агрегата, и когда обработчик команд вызывает методы агрегата. Хотя в последнем я видел примеры, когда события публикуются в обработчике команд, а не в агрегате, что, как я убежден, неверно.
Мой вопрос в том, каковы плюсы и минусы между методом (1) и (2).