Ответ
Command Query Separation (CQS) — это принцип проектирования, который разделяет операции на команды (изменяющие состояние) и запросы (возвращающие данные).
Ключевые идеи:
- Команды выполняют действия (например, сохранение данных), но не возвращают значения.
- Запросы возвращают данные, но не изменяют состояние системы.
Пример:
// Команда (изменяет состояние)
function updateUser(user) {
database.save(user); // нет return
}
// Запрос (возвращает данные)
function getUser(id) {
return database.find(id); // не изменяет состояние
}
Плюсы:
- Четкое разделение логики.
- Упрощение тестирования и понимания кода.
Минусы:
- Иногда сложно строго соблюдать (например, если метод должен и изменять состояние, и возвращать данные).
Применяется в паттернах (CQRS) и API-дизайне (REST, GraphQL).