Устоявшийся в DDD (domain-driven design) паттерн
Смысл его в разделении логики работы с данными на часть, которая просто запрашивает данные (
Query:
- Не изменяет состояние системы. Никаких сайд эффектов
- Контекст запроса хранит нужные для её выполнения данные (пейджинг, фильтры и т.п.)
- Возвращает результат
Command:
- Изменяет состояние системы
- Ничего не возвращает
- Хорошо описывает предметную область, как действия пользователей над системой
- Контекст команды хранит нужные для её выполнения данные
Например, пользователь при регистрации вводит email, его надо валидировать и сохранить. В случае следования
В аспекте Vue.js
#architecture #ddd
CQRS
(Command and Query Responsibility Segregation) или CQS
(Command and Query Segregation) - разделение команд и запросов - может сделать программу более понятной и поддерживаемой.Смысл его в разделении логики работы с данными на часть, которая просто запрашивает данные (
query
), и часть, которая их изменяет (command
).Query:
- Не изменяет состояние системы. Никаких сайд эффектов
- Контекст запроса хранит нужные для её выполнения данные (пейджинг, фильтры и т.п.)
- Возвращает результат
Command:
- Изменяет состояние системы
- Ничего не возвращает
- Хорошо описывает предметную область, как действия пользователей над системой
- Контекст команды хранит нужные для её выполнения данные
Например, пользователь при регистрации вводит email, его надо валидировать и сохранить. В случае следования
CQS
необходимо разделить логику на две части (сделать две функции) - валидация (проверка корректности и наличия такого email уже в базе данных) и сохранение.В аспекте Vue.js
computed
работает как реактивный query
, watch
- реактивный command
#architecture #ddd