Почему репозиторий CQRS публикует события, а не хранилище событий?
Согласно http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young компонент, отвечающий за публикацию событий с использованием издателя событий, является хранилищем.
Мой вопрос просто: почему это?
В этом посте нам сообщают, что:
Репозиторий домена отвечает за публикацию событий, обычно это происходит внутри одной транзакции вместе с хранением событий в хранилище событий.
Я бы ожидал, что это будет задачей хранилища событий: как только событие (или несколько событий) будет сохранено, оно будет опубликовано.
Так почему же это в хранилище?
2 ответа
Ваша модель домена не знает механизм хранения. С другой стороны, он должен убедиться, что соответствующие события будут опубликованы, независимо от того, используете ли вы хранилище событий, классическое хранилище SQL или любые другие средства сохранения.
Если вы используете хранилище событий для публикации событий, у вас будет тесная связь с механизмом хранения.
Хранение и публикация события должна быть атомарной инструкцией, потому что если одно из двух действий завершится неудачно, прослушиватели этого события будут не синхронизированы с источником события.
Существует другое (более дорогое) решение по сравнению с публикацией события из хранилища событий, которое заключается в использовании транзакций 2pc (двухфазная фиксация).
Вы можете найти более интересную информацию здесь: https://cqrs.wordpress.com/documents/building-event-storage/