CQRS: Архитектура, которая...
Transcript of CQRS: Архитектура, которая...
![Page 1: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/1.jpg)
Восьмая независимая научно-практическая конференция «Разработка ПО 2012»1 - 2 ноября, Москва
Ксения Мухортова
CQRS: Архитектура, которая делает бизнес-приложения лучше
Intel
![Page 2: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/2.jpg)
Проблемы разработчика бизнес-приложений
Предметная область - чужой мир Частое изменение требований Не- или слабоструктурированные данные
![Page 3: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/3.jpg)
Технические проблемы
Изменения требований затрагивают всё приложение
Эволюция технологий Поддержка нескольких типов UI Несоответствие моделей хранения – логики –
отображения AJAX: Необходимость передавать и view и
данные
![Page 4: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/4.jpg)
Опять проблемы?
Меняешь доменную модель – переделай маппинги
Масштабируемость и синхронизация Бизнес-намерения утеряны при сохранении
данных
ЖУТКО СЛОЖНО!!!
![Page 5: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/5.jpg)
CQS -> CQRS
Command: команда выполняет действие, не возвращает результат
Query: запрос возвращает результат, не выполняет действий
![Page 6: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/6.jpg)
Подсистема запросов
Клиент viewПрезентационная логика
БД для чтения
SQL
«Тупой» слой трансформации
DTOs
![Page 7: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/7.jpg)
Подсистема команд
Репозиторий
Клиент view
Команды
Обработчик команд
Домен Результаты запроса
«Тупой» слой трансформации«Тупой» слой
трансформации
Храни-лище
События События
Презентационная логика
![Page 8: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/8.jpg)
Event sourcing
![Page 9: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/9.jpg)
Команда Событие
![Page 10: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/10.jpg)
Подсистема синхронизации
Домен
Обработчик событий/
Денормализатор
«Тупой» слой трансформации
![Page 11: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/11.jpg)
Клиент viewПрезентационная логика
БД для чтения
SQL
«Тупой» слой трансформации
DTOs
Репозиторий
Команды
Обработчик команд
Домен Результаты запроса
Храни-лище
События События
Обработчик событий/
Денормализатор
Всё вместе
![Page 12: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/12.jpg)
Преимущества event sourcing
Хранятся только события – объективные факты Независимость структуры доменных объектов от
модели хранения Возможность ретроспективной функциональности Тестирование поведения, а не состояния
![Page 13: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/13.jpg)
Тестируем поведение (BDD)
Каждый сценарий описывается тремя категориями: •Given:
инстанциируем объект, устанавливаем состояние проигрывая цепочку событий
•When: вызываем команду•Then:проверяем сгенерированные события
BDD заставляет мыслить в терминах функциональности13
![Page 14: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/14.jpg)
Универсальное решение?
![Page 15: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/15.jpg)
Важно запомнить про CQRS
15
““Правильный” DDD – залог успехаAggregates (eventual vs transactional consistency)Bounded contextsМоделирование поведения, а не реального мира
Отличия между командами и событиямиORM в write части – ЗЛОUnit-тестируйте поведение, а не состояние
![Page 16: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/16.jpg)
Источники информации
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: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/17.jpg)
Пример
![Page 18: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/18.jpg)
Предметная область
18
Task
Stage 1 Stage 2 Stage N
![Page 19: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/19.jpg)
Предметная область
19
Stage
End condition
Stage 1
Stage 2
![Page 20: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/20.jpg)
Отправка команды добавления задачи на WCF сервис
20
![Page 21: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/21.jpg)
Интерфейс WCF сервиса
21
![Page 22: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/22.jpg)
Команда добавления задачи
22
![Page 23: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/23.jpg)
Обработчик команды добавления задачи
23
![Page 24: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/24.jpg)
Доменный объект “задача”
24
![Page 25: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/25.jpg)
Обработчик события добавления задачи
25
![Page 26: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/26.jpg)
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: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/27.jpg)
Получение списка задач
27
![Page 28: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/28.jpg)
Тестирование
28
![Page 29: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/29.jpg)
29
![Page 30: CQRS: Архитектура, которая делает2012.secrus.org/2012/presentations/mukhortova_85.pdfCQRS: Архитектура, которая делает бизнес-приложения](https://reader035.fdocument.pub/reader035/viewer/2022062603/5f0baddf7e708231d431afa9/html5/thumbnails/30.jpg)
30