Приложение
Хранилище событий
Postgres
NATS / Kafka
Хранилище событий хранит историю событий домена, которую приложение считает источником истины. Postgres и шины сообщений остаются внешними потребителями или транспортом.

Обработчик команды, агрегат и репозиторий

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

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

Модели команд и запросов

В CQRS модель записи обеспечивает выполнение поведения предметной области. Модели чтения обслуживают запросы и могут иметь другую структуру или использовать другое хранилище.

Проекция преобразует события в модель чтения. Обработчик запроса читает эту модель. Компоненты могут работать в одном процессе или отдельно.

Ответственность Chronacta

Chronacta хранит потоки событий, проверяет ожидаемые версии, предоставляет чтение и доставляет события через подписки. Сервер также предоставляет встроенные возможности проекций.

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

Ограниченные контексты и интеграция

Ограниченный контекст задаёт область действия модели предметной области и её языка. Он не равнозначен потоку событий или экземпляру сервера.

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

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

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

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