Top Banner
Игорь Лубенец [email protected] Степан Мозыра [email protected] Применение CQRS и EventSourcing в DDD-проекте 1
63

Применение CQRS и EventSourcing в DDD-проекте

Apr 15, 2017

Download

Technology

Igor Lubenets
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Применение CQRS и EventSourcing в DDD-проекте

Игорь Лубенец[email protected]

Степан Мозыра[email protected]

ПрименениеCQRS и EventSourcingв DDD-проекте

1

Page 2: Применение CQRS и EventSourcing в DDD-проекте

О нас

Степан Мозыра[email protected]

Игорь Лубенец[email protected]

2

Page 3: Применение CQRS и EventSourcing в DDD-проекте

О чем пойдёт речь

3

• Немного о проекте

• DDD

• CQRS

• Event Sourcing

• Как это всё работает вместе

• Выводы

Page 4: Применение CQRS и EventSourcing в DDD-проекте

4

Немного о проекте

Page 5: Применение CQRS и EventSourcing в DDD-проекте

Немного о проекте

5

Page 6: Применение CQRS и EventSourcing в DDD-проекте

Немного о проекте

5

Page 7: Применение CQRS и EventSourcing в DDD-проекте

Немного о проекте

5

Page 8: Применение CQRS и EventSourcing в DDD-проекте

Немного о проекте

5

Page 9: Применение CQRS и EventSourcing в DDD-проекте

Немного о проекте

5

Page 10: Применение CQRS и EventSourcing в DDD-проекте

6

Немного о проекте

Page 11: Применение CQRS и EventSourcing в DDD-проекте

6

Немного о проекте

Условия:

• Быстрый старт

• Конкуренция

• Неясные требования

• Ограниченный ресурс

Page 12: Применение CQRS и EventSourcing в DDD-проекте

6

Немного о проекте

Условия:

• Быстрый старт

• Конкуренция

• Неясные требования

• Ограниченный ресурс

Требования:

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 13: Применение CQRS и EventSourcing в DDD-проекте

7

Рефакторинг?..

Немного о проекте

Page 14: Применение CQRS и EventSourcing в DDD-проекте

8

Rebuild!

Немного о проекте

Page 15: Применение CQRS и EventSourcing в DDD-проекте

8

Rebuild!

Немного о проекте

Page 16: Применение CQRS и EventSourcing в DDD-проекте

9

DDD

Page 17: Применение CQRS и EventSourcing в DDD-проекте

В общем про DDD

10

Domain-driven Design

(Предметно-ориентированное проектирование)

2003, теория 2013, практика

Эрик Эванс Вон Вернон

Page 18: Применение CQRS и EventSourcing в DDD-проекте

В общем про DDD

11

Единый язык (Ubiquitous language)

Page 19: Применение CQRS и EventSourcing в DDD-проекте

В общем про DDD

12

Домен, поддомены, контексты

Page 20: Применение CQRS и EventSourcing в DDD-проекте

В общем про DDD

13

Гексагональная архитектура(Архитектура портов и адаптеров)

MQ Service

AggregateRoot

REST

Port

MQPort

ApplicationService

Command

Transport

Business Method

Page 21: Применение CQRS и EventSourcing в DDD-проекте

14

CQRS

Page 22: Применение CQRS и EventSourcing в DDD-проекте

CQRS

15

Command Query Responsibility Segregation

Page 23: Применение CQRS и EventSourcing в DDD-проекте

CQRS

15

Command Query Responsibility Segregation

Command

• Контейнер для данных, представляющих изменения

• Неизменяемая (Immutable)

• Не возвращает данных

• Может быть версионирована

Page 24: Применение CQRS и EventSourcing в DDD-проекте

CQRS

15

Command Query Responsibility Segregation

Command

• Контейнер для данных, представляющих изменения

• Неизменяемая (Immutable)

• Не возвращает данных

• Может быть версионирована

Query

• Возвращает подготовленные данные

• Без побочных эффектов

• Может быть версионирован

Page 25: Применение CQRS и EventSourcing в DDD-проекте

CQRS

15

Command Query Responsibility Segregation

Command

• Контейнер для данных, представляющих изменения

• Неизменяемая (Immutable)

• Не возвращает данных

• Может быть версионирована

Query

• Возвращает подготовленные данные

• Без побочных эффектов

• Может быть версионирован

Message

Page 26: Применение CQRS и EventSourcing в DDD-проекте

CQRS

Актуализация модели чтения (ReadModel)

16

Page 27: Применение CQRS и EventSourcing в DDD-проекте

CQRS

Актуализация модели чтения (ReadModel)

Синхронно

16

Page 28: Применение CQRS и EventSourcing в DDD-проекте

CQRS

Актуализация модели чтения (ReadModel)

Синхронно Асинхронно

Message Bus

16

Page 29: Применение CQRS и EventSourcing в DDD-проекте

CQRS

17

CQRS vs CRUD

CQRS CRUD

Бизнес логика сервер клиент

Команды ∞ 3

Запросыоптимизированный

результатподготовка каждого

результат

Делимость «из коробки» проблематично

Page 30: Применение CQRS и EventSourcing в DDD-проекте

18

Event Sourcing

Page 31: Применение CQRS и EventSourcing в DDD-проекте

Event Sourcing

19

Сущность

id Состояние Состояние Состояние Состояние Состояние

…Реляционная таблица

Page 32: Применение CQRS и EventSourcing в DDD-проекте

Event Sourcing

19

Сущность

id Состояние Состояние Состояние Состояние Состояние

…Реляционная таблица

id Состояние

…Документ

Page 33: Применение CQRS и EventSourcing в DDD-проекте

Event Sourcing

19

Сущность

id Состояние Состояние Состояние Состояние Состояние

…Реляционная таблица

id Состояние

…Документ

idv1 Изменениеv2 Изменениеv3 Изменение

Event store

Even

t st

ream}

Page 34: Применение CQRS и EventSourcing в DDD-проекте

Event Sourcing

20

Page 35: Применение CQRS и EventSourcing в DDD-проекте

Event Sourcing

20

Page 36: Применение CQRS и EventSourcing в DDD-проекте

Event Sourcing

20

Page 37: Применение CQRS и EventSourcing в DDD-проекте

21

Как это всё работает вместе

Page 38: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

22

Page 39: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

23

Page 40: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

24

Page 41: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

25

Page 42: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

26

Page 43: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

27

Page 44: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

28

Page 45: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

29

Page 46: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

30

Page 47: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

31

Page 48: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

32

Page 49: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

33

Пример:

Page 50: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

33

Пример:

Регистрация пользователя:

• Пользователь должен иметь возможность зарегистрироваться на сайте

• Пользователь должен иметь возможность сменить контактные данные (email)

• Оператор должен активировать пользователя после проверки его документов

Page 51: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

34

Page 52: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

35

Event stream

CustomerWasRegisteredV1

CustomerEmailWasChangedV1

CustomerWasActivatedV1

CustomerEmailWasChangedV1Время

Page 53: Применение CQRS и EventSourcing в DDD-проекте

Как это всё работает вместе

35

Event stream

CustomerWasRegisteredV1

CustomerEmailWasChangedV1

CustomerWasActivatedV1

CustomerEmailWasChangedV1

CustomerEmailWasChangedV2

Время

Page 54: Применение CQRS и EventSourcing в DDD-проекте

36

Выводы

Page 55: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 56: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 57: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 58: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 59: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 60: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

Page 61: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

• Количество кода

Page 62: Применение CQRS и EventSourcing в DDD-проекте

37

Выводы

• Экспансия

• Нагрузка

• Стабильность системы

• Мониторинг

• Тестируемость

• Количество кода

• Хранение устаревших событий

Page 63: Применение CQRS и EventSourcing в DDD-проекте

38

Спасибо за внимание!