Command Query Responsibility Segregation

Содержание

Слайд 2

Но для начала выкинем R из CQRS CQS – Command Query

Но для начала выкинем R из CQRS

CQS – Command Query Separation,

разделение команд и запросов
Основная идея CQS заключается в том, что любые методы могут быть только двух типов:
- Queries – возвращают результат, не изменяя состояние объекта
- Commands - изменяют состояние объекта, не возвращая значение
Слайд 3

Не-CQS-ный код

Не-CQS-ный код

Слайд 4

Превращается в CQS-ный код

Превращается в CQS-ный код

Слайд 5

А вот теперь CQRS CQRS – Command Query Responsibility Segregation, разделение

А вот теперь CQRS

CQRS – Command Query Responsibility Segregation, разделение ответственности

на команды и запросы
Та же идея, что и в CQS, но на более высоком уровне – на уровне всей системы
Для изменения состояния системы используем Command
Для выборки данных о состоянии системы используем Query
Слайд 6

CRUD-сценарий

CRUD-сценарий

Слайд 7

Что происходит дальше? - У нас есть концептуальная модель, которая взаимодействует

Что происходит дальше?

- У нас есть концептуальная модель, которая взаимодействует с

основными объектами нашего домена
- Мы стараемся сделать наше хранилище наиболее приближенным к нашим данным
- Нам требуется выбирать и отображать все более сложно связанные данные, в том числе отчеты
- Наши объекты становятся все более сложными с большим количеством вспомогательных полей
- Вслед за объектами усложняется и хранилище
- Появляется лишнее для команд, нужное только для запросов
Слайд 8

CQRS-сценарий

CQRS-сценарий

Слайд 9

CQRS-сценарий с разными хранилищами

CQRS-сценарий с разными хранилищами

Слайд 10

Эволюция команд и запросов на практике Акт первый

Эволюция команд и запросов на практике Акт первый

Слайд 11

Эволюция команд и запросов на практике Акт второй

Эволюция команд и запросов на практике Акт второй

Слайд 12

Эволюция команд и запросов на практике Акт третий

Эволюция команд и запросов на практике Акт третий

Слайд 13

Эволюция команд и запросов на практике Акт четвертый

Эволюция команд и запросов на практике Акт четвертый

Слайд 14

Эволюция команд и запросов на практике Занавес - Меньше зависимостей в

Эволюция команд и запросов на практике Занавес

- Меньше зависимостей в каждом классе
-

Соблюдается принцип единственной ответственности
- Маленький класс проще заменить
- Маленький класс проще тестировать
- В целом дизайн кода однотипный и понятный
- При расширении функциональности системы сложность дизайна растет почти линейно
Слайд 15

CQRS может быть на любом уровне Тенденция рефакторинга: - Растет количество

CQRS может быть на любом уровне

Тенденция рефакторинга:
- Растет количество классов
- Растет

количество методов в каждом классе
- Растет количество зависимостей каждого класса
- Разбиваем их на Command и Query
Вместо больших классов с множеством зависимостей мы движемся в сторону большого количества маленьких однотипных классов, каждый из которых отвечает за единственное бизнес-правило
Слайд 16

Наш недо-CQRS

Наш недо-CQRS

Слайд 17

Наш недо-CQRS

Наш недо-CQRS

Слайд 18

Наш недо-CQRS

Наш недо-CQRS

Слайд 19

Наш недо-CQRS

Наш недо-CQRS

Слайд 20

Наш недо-CQRS

Наш недо-CQRS

Слайд 21

Наш недо-CQRS

Наш недо-CQRS

Слайд 22

Как это выглядит в бою?

Как это выглядит в бою?

Слайд 23

Как это выглядит в бою?

Как это выглядит в бою?