Я пытаюсь обернуть голову вокруг Saga, используя Jonathan Olivers EventStore и CommonDomain.Я понимаю, как Агрегаты работают с CommonDomain / EventStore, но я застрял в понимании использования Saga.Я прочитал обе саги Джонатана с Event Sourcing Part I и II, но все еще теряется в реальной реализации
1) Больше наблюдения, когда при сохранении саги EventStore использует заголовки для сохранения саги и команд, которые нуждаютсячтобы быть разосланным, и похоже, что полезная нагрузка хранит событие, которое вызвало сагу "проснуться".Интересно причины для этого.Мы бы никогда не хотели хранить отдельные команды против их всех в заголовке?
1) Кажется, что Событие, которое вызвало Saga, воспроизводится несколько раз, так как метод "Переход" в SagaBase всегда повторно добавляетсобытие к незафиксированной коллекции.(В отличие от AR, которые имеют внутренний метод Apply против метода Public Domain).Возможно, я не использую метод перехода должным образом
2) Обычно шина, которую вы используете с EventStore, будет публиковать события (я реализовал IPublishMessages).Если мне нужна моя Saga для публикации команды, то, похоже, нет опции Send.Нужно ли анализировать заголовки, чтобы получить команды самостоятельно?
Мне кажется, что я неправильно использую CommonDomain / EventStore, так как работать с Aggregates было легко, но Saga мне кажется "неполным".Я предполагаю это, потому что я не делаю это правильно.Все еще очень плохо знаком с CQRS.У кого-нибудь есть рабочий пример использования Saga J Olivers Common Domain / Event Store?Я думаю, что это значительно прояснит ситуацию.
[РЕДАКТИРОВАТЬ] Я думаю, я понял это, но хотел бы некоторый вклад.Сага действительно не должна публиковать события.Они посылают команды.Таким образом, на стороне публикации вещей для EventStore (IPublishMessages) я должен сначала проверить тип сообщения (AggregateType vs SagaType). Для AggregateTypes я могу публиковать события, но для SagaTypes публикуют только команды (находятся в заголовке).Это исключает то же событие (скажем, OrderSubmittedEvent), которое инициирует создание саги, чтобы не публиковать ее снова при сохранении саги.