30
Восьмая независимая научно-практическая конференция «Разработка ПО 2012» 1 - 2 ноября, Москва Ксения Мухортова CQRS: Архитектура, которая делает бизнес-приложения лучше Intel

CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Восьмая независимая научно-практическая конференция «Разработка ПО 2012»1 - 2 ноября, Москва

Ксения Мухортова

CQRS: Архитектура, которая делает бизнес-приложения лучше

Intel

Page 2: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Проблемы разработчика бизнес-приложений

Предметная область - чужой мир Частое изменение требований Не- или слабоструктурированные данные

Page 3: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Технические проблемы

Изменения требований затрагивают всё приложение

Эволюция технологий Поддержка нескольких типов UI Несоответствие моделей хранения – логики –

отображения AJAX: Необходимость передавать и view и

данные

Page 4: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Опять проблемы?

Меняешь доменную модель – переделай маппинги

Масштабируемость и синхронизация Бизнес-намерения утеряны при сохранении

данных

ЖУТКО СЛОЖНО!!!

Page 5: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

CQS -> CQRS

Command: команда выполняет действие, не возвращает результат

Query: запрос возвращает результат, не выполняет действий

Page 6: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Подсистема запросов

Клиент viewПрезентационная логика

БД для чтения

SQL

«Тупой» слой трансформации

DTOs

Page 7: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Подсистема команд

Репозиторий

Клиент view

Команды

Обработчик команд

Домен Результаты запроса

«Тупой» слой трансформации«Тупой» слой

трансформации

Храни-лище

События События

Презентационная логика

Page 8: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Event sourcing

Page 9: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Команда Событие

Page 10: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Подсистема синхронизации

Домен

Обработчик событий/

Денормализатор

«Тупой» слой трансформации

Page 11: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Клиент viewПрезентационная логика

БД для чтения

SQL

«Тупой» слой трансформации

DTOs

Репозиторий

Команды

Обработчик команд

Домен Результаты запроса

Храни-лище

События События

Обработчик событий/

Денормализатор

Всё вместе

Page 12: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Преимущества event sourcing

Хранятся только события – объективные факты Независимость структуры доменных объектов от

модели хранения Возможность ретроспективной функциональности Тестирование поведения, а не состояния

Page 13: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Тестируем поведение (BDD)

Каждый сценарий описывается тремя категориями: •Given:

инстанциируем объект, устанавливаем состояние проигрывая цепочку событий

•When: вызываем команду•Then:проверяем сгенерированные события

BDD заставляет мыслить в терминах функциональности13

Page 14: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Универсальное решение?

Page 15: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Важно запомнить про CQRS

15

““Правильный” DDD – залог успехаAggregates (eventual vs transactional consistency)Bounded contextsМоделирование поведения, а не реального мира

Отличия между командами и событиямиORM в write части – ЗЛОUnit-тестируйте поведение, а не состояние

Page 16: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Источники информации

Greg Young, Udi Dahan, Eric Evans, Rinat AbdullinMicrosoft CQRS journey: http://msdn.microsoft.com/en-us/library/jj554200.aspx

16

Page 17: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Пример

Page 18: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Предметная область

18

Task

Stage 1 Stage 2 Stage N

Page 19: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Предметная область

19

Stage

End condition

Stage 1

Stage 2

Page 20: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Отправка команды добавления задачи на WCF сервис

20

Page 21: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Интерфейс WCF сервиса

21

Page 22: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Команда добавления задачи

22

Page 23: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Обработчик команды добавления задачи

23

Page 24: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Доменный объект “задача”

24

Page 25: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Обработчик события добавления задачи

25

Page 26: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

26

Id Task name Task Status Stage name Stage status

1 First task NotStarted First stage NotStarted

1 First task NotStarted Second stage NotStarted

Id Name Status

1 First task NotStarted

2 Second task InProgressId Name

1 First task

3 Third task

Page 27: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Получение списка задач

27

Page 28: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

Тестирование

28

Page 29: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

29

Page 30: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения

30