У меня есть сложная регистрационная форма в веб-приложении. Когда пользователь отправляет эту регистрационную форму, команда отправляется обработчику команд. Это создает агрегат. Затем он будет сохранен в денормализованной базе данных, а также в хранилище событий. Когда эта транзакция выполнена, событие публикуется. Из-за этого события обработчик событий в конечном итоге создаст другой Aggregate.
Регистрация действительно завершена только тогда, когда созданы оба агрегата. Это должно происходить в одном и том же процессе, но у обоих есть своя транзакция. (в конечном итоге соответствует)
Таким образом, теоретически может случиться так, что AggregateOne
сохраняется как в денормализованной базе данных, так и в хранилище событий, но AggregateTwo
где-то в процессе может вызвать исключение из-за ошибки или ошибки проверки (например: требуется имя пользователя ).
Это означает, что у меня неполная регистрация, потому что сохранилась только половина данных. Но пользователь ожидает увидеть все введенные им данные.
Как решаются подобные проблемы в проектировании, управляемом предметной областью?
Примечание. На самом деле у меня нет сложной регистрационной формы. Это всего лишь пример сценария. Мне просто интересно, как решать подобные проблемы.