Хронология потока заказаOrderPlacedv1ItemAddedv2PaymentAuthorizedv3OrderShippedv4
Учебный пример потока заказа: каждое событие домена получает версию в потоке. Это иллюстрация, а не отчёт о внедрении.

Поток заказа

Пример потока order-123 содержит OrderPlaced с версией v1, ItemAdded с v2, PaymentAuthorized с v3 и OrderShipped с v4.

Названия событий должны соответствовать реальному языку предметной области. В этом примере предполагается, что после оформления заказа можно добавлять позиции, а отгрузка требует авторизации платежа.

Построение модели чтения

Проекция списка заказов обрабатывает события и сохраняет поля для запросов, например идентификатор и статус заказа.

Другая проекция может строить список заказов, ожидающих оплаты. Обе модели выводятся из событий и не заменяют логику принятия решений в агрегате.

Изменения из интерфейса

Клиент может передавать версию заказа, показанную пользователю. Обработчик команды проверяет это предварительное условие и сохраняет события с соответствующей ожидаемой версией.

Если модель чтения ещё не обработала успешную запись, интерфейс должен сообщать о задержке, а не создавать впечатление, что команда завершилась ошибкой.

Расширение модели

Отмена, возврат средств и частичная отгрузка требуют отдельного поведения и событий. Не изменяйте прежнее событие, чтобы представить выполненную операцию как не происходившую.

Складской учёт и платежи могут относиться к другим агрегатам или ограниченным контекстам. Явно определяйте их координацию и обработку ошибок.

Практическое упражнение

Реализуйте допустимый переход состояния, отказ по инварианту и отказ записи из-за конфликта версий. Это три разных результата.

Путь обучения Event Sourcing · Назад · Далее · Документация Chronacta