«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Разделение командных запросов (CQS): руководство по лучшему дизайну программного обеспечения

Разделение командных запросов (CQS): руководство по лучшему дизайну программного обеспечения

Опубликовано в 2025-03-23
Просматривать:910

разделение командных запросов (CQS) является фундаментальным принципом дизайна программного обеспечения, который способствует ясности и простоте в вашей кодовой базе. Придуманный Бертран Мейер, принцип гласит, что каждый метод в системе должен либо выполнять действие (команда), либо возвращать данные (запрос), но никогда не оба. Это различие гарантирует, что ваш код будет легче понять, тестировать и поддерживать.

]

в этом сообщении в блоге мы рассмотрим ключевые аспекты CQ, как его реализовать, и преимущества, которые он приносит для разработки программного обеспечения. Мы также предоставим примеры применения CQ в практических сценариях, таких как дизайн API и взаимодействия с базой данных.

]

1⃣ понимание оснований CQS

]

в своем ядро ​​CQS разделяет функции на две отдельные категории:

]

Команды: выполнить действия, которые изменяют состояние системы, но не возвращают значение (например, обновление базы данных или отправка электронной почты).

Queries: извлечь данные без изменения состояния системы (например, получение данных пользователя из базы данных).

]

это разделение упрощает рассуждения о коде и избегает непреднамеренных побочных эффектов.

2⃣ Преимущества использования CQS
] Улучшенная читаемость кода: очистить различие между командами и запросами облегчает понимание кода.
] Снижение побочных эффектов: запросы не изменяют состояние, обеспечивая предсказуемое поведение.
] Проще говоря, команды и запросы могут быть проверены независимо, уменьшая сложность в тестовых случаях.
] Масштабируемый дизайн: поощряет модульный и отдельный код, облегчая масштаб и расширение.

3⃣ реализация CQS на практике

]

Пример: express.js api

]

давайте применим принципы CQS к приложению Express.js:

]

? Без CQS:
]

]
app.post('/user', (req, res) => {
  const user = createUser(req.body); // Command
  res.json(user); // Query
});
]

? С CQS:
]

]
app.post('/user', (req, res) => {
  createUser(req.body); // Command
  res.sendStatus(201);
});

app.get('/user/:id', (req, res) => {
  const user = getUser(req.params.id); // Query
  res.json(user);
});
]

здесь, команды (createUser) и Queries (getUser) разделены, что делает обязанности каждой функции более четкой.

]

4⃣ вызовы и решения

]

интеграция с устаревшим кодом: принятие CQ в существующей кодовой базе может потребовать рефакторинга. Начните с малого, фокусируясь на новых функциях или критических компонентах.

]

Overh Hear: строгая приверженность CQS иногда может привести к дополнительным вызовам функций. Оптимизируйте выборочно, чтобы сбалансировать ясность и производительность.

]
]

Заключение

разделение командного запроса является простым, но мощным принципом, который способствует ясности и обслуживаемости в дизайне программного обеспечения. Принимая этот подход, вы можете создавать системы, о которых легче рассуждать, масштабировать и проверить. Независимо от того, проектируете ли вы API, внедряете логику доменов или управляете взаимодействие базы данных, CQS является ценным инструментом для современной разработки программного обеспечения.

]

Command Query Separation (CQS): A Guide to Better Software Design

] ]
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/wallacefreitas/command-query-separation-cqs-a-guide-tabreitas-design-2jab?
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3