CQRS (Command Query Responsibility Segregation) — pattern, где read и write операции использую разные data models, часто разные databases. Write-side handles commands (create/update), read-side — queries. Применяется при high read-load (social feeds, analytics) или complex domain. Часто сочетается с Event Sourcing. Complexity overhead велик — не нужен для CRUD apps.
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// Command (write)
class CreateOrderCommand { orderId, customerId, items }
// Query (read)
class OrderSummaryView { orderId, total, status } // denormalizedCQRS (Command Query Responsibility Segregation) — это архитектурный шаблон, который разделяет операции чтения (query) и записи (command) данных. Это позволяет оптимизировать производительность, масштабируемость и безопасность приложения, так как разные модели данных могут использоваться для обработки команд и запросов. CQRS часто применяется в больших системах с высокой нагрузкой, где важно разделение бизнес-логики и упрощение управления данными.
Использование CQRS имеет свои преимущества и недостатки. Рассмотрим их подробнее:
Рассмотрим пример реализации CQRS на языке программирования C#. В этом примере мы создадим простую систему управления заказами.
public class OrderCommand { public int Id { get; set; } public string Product { get; set; } public int Quantity { get; set; } }Команда для создания заказа может выглядеть следующим образом:
public class CreateOrderCommandHandler { public void Handle(OrderCommand command) { // Логика создания заказа здесь }} Теперь создадим класс для обработки запросов:
public class OrderQueryHandler { public Order GetOrder(int id) { // Логика получения заказа здесь }} В этом примере мы четко разделили логику создания и получения заказов, что позволяет оптимизировать каждую из операций отдельно. CQRS также может быть использован в сочетании с Event Sourcing для сохранения истории изменений.
CRUD — один model для чтения и записи. CQRS — разделение, больше кода, но лучше для complex domains. Для simple apps — overkill.
Нет. CQRS работает и с обычной SQL. Но ES хорошо дополняет — write-side пишет events, read-side materializes views.
Async через events (Kafka, RabbitMQ). Eventual consistency — read model отстаёт на секунды-минуты.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.