Применение CQRS и EventSourcing в DDD-проекте
-
Upload
igor-lubenets -
Category
Technology
-
view
145 -
download
1
Transcript of Применение CQRS и EventSourcing в DDD-проекте
Игорь Лубенец[email protected]
Степан Мозыра[email protected]
ПрименениеCQRS и EventSourcingв DDD-проекте
1
О чем пойдёт речь
3
• Немного о проекте
• DDD
• CQRS
• Event Sourcing
• Как это всё работает вместе
• Выводы
6
Немного о проекте
Условия:
• Быстрый старт
• Конкуренция
• Неясные требования
• Ограниченный ресурс
6
Немного о проекте
Условия:
• Быстрый старт
• Конкуренция
• Неясные требования
• Ограниченный ресурс
Требования:
• Экспансия
• Нагрузка
• Стабильность системы
• Мониторинг
• Тестируемость
В общем про DDD
10
Domain-driven Design
(Предметно-ориентированное проектирование)
2003, теория 2013, практика
Эрик Эванс Вон Вернон
В общем про DDD
13
Гексагональная архитектура(Архитектура портов и адаптеров)
MQ Service
AggregateRoot
REST
Port
MQPort
ApplicationService
Command
Transport
Business Method
CQRS
15
Command Query Responsibility Segregation
Command
• Контейнер для данных, представляющих изменения
• Неизменяемая (Immutable)
• Не возвращает данных
• Может быть версионирована
CQRS
15
Command Query Responsibility Segregation
Command
• Контейнер для данных, представляющих изменения
• Неизменяемая (Immutable)
• Не возвращает данных
• Может быть версионирована
Query
• Возвращает подготовленные данные
• Без побочных эффектов
• Может быть версионирован
CQRS
15
Command Query Responsibility Segregation
Command
• Контейнер для данных, представляющих изменения
• Неизменяемая (Immutable)
• Не возвращает данных
• Может быть версионирована
Query
• Возвращает подготовленные данные
• Без побочных эффектов
• Может быть версионирован
Message
CQRS
17
CQRS vs CRUD
CQRS CRUD
Бизнес логика сервер клиент
Команды ∞ 3
Запросыоптимизированный
результатподготовка каждого
результат
Делимость «из коробки» проблематично
Event Sourcing
19
Сущность
id Состояние Состояние Состояние Состояние Состояние
…
…Реляционная таблица
Event Sourcing
19
Сущность
id Состояние Состояние Состояние Состояние Состояние
…
…Реляционная таблица
id Состояние
…
…Документ
Event Sourcing
19
Сущность
id Состояние Состояние Состояние Состояние Состояние
…
…Реляционная таблица
id Состояние
…
…Документ
idv1 Изменениеv2 Изменениеv3 Изменение
…
…
Event store
Even
t st
ream}
Как это всё работает вместе
33
Пример:
Регистрация пользователя:
• Пользователь должен иметь возможность зарегистрироваться на сайте
• Пользователь должен иметь возможность сменить контактные данные (email)
• Оператор должен активировать пользователя после проверки его документов
Как это всё работает вместе
35
Event stream
CustomerWasRegisteredV1
CustomerEmailWasChangedV1
CustomerWasActivatedV1
CustomerEmailWasChangedV1Время
Как это всё работает вместе
35
Event stream
CustomerWasRegisteredV1
CustomerEmailWasChangedV1
CustomerWasActivatedV1
CustomerEmailWasChangedV1
…
CustomerEmailWasChangedV2
Время
37
Выводы
• Экспансия
• Нагрузка
• Стабильность системы
• Мониторинг
• Тестируемость
• Количество кода
37
Выводы
• Экспансия
• Нагрузка
• Стабильность системы
• Мониторинг
• Тестируемость
• Количество кода
• Хранение устаревших событий