CQRS

CQRS

Command-query separation (CQS) или command-query responsibility segregation (CQRS) — это принцип императивного программирования, изобретенный Бертраном Мейером во время работы над языком программирования Eiffel.

Принцип гласит, что метод должен быть либо командой, выполняющей какое-то действие, либо запросом, возвращающим данные, но не одновременно. Другими словами, спрашивание вопроса не должно менять ответ. Более формально, возвращать значение можно только чистым, не имеющим побочных эффектов методам. Следует отметить, что неукоснительное соблюдение этого принципа делает невозможным отслеживание количества вызовов запросов.

Содержание

Применение в контрактном программировании

CQRS особенно хорошо вписывается в методологию контрактного программирования, в которой используются утверждения, встроенные в исходный код, описывающие состояние программы в определенные важные моменты. В контрактном программировании утверждения относятся к проектированию, а не к логике выполнения, поэтому их выполнение не должно оказывать влияния на состояние программы. CQRS выгоден для контрактного программирования, т.к. любой возвращающий значение метод (любой запрос) можно вызывать в утверждениях, не беспокоясь об возможном изменении состояния программы.

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

Другие применения

Даже за пределами контрактного программирования, применение CQRS рассматривается его приверженцами как оказывающее эффект упрощения на программу, делая доступ к ее состоянию (через запросы) и изменение ее состояния (через команды) более понятными, аналогично тому как избежание использования goto упрощает понимание потока выполнения программы.

CQRS хорошо подходит для методологии объектно-ориентированного программирования, но может быть применен и вне ООП, т.к. разделение побочных эффектов и возвращения значений не требует ООП, поэтому CQRS может быть с пользой применен в любой парадигме программирования, требующей заботы о побочных эффектах.

Недостатки

CQRS может осложнить создание реентерабельного и многопоточного ПО. Эта проблема обычно возникает при использовании непотокобезопасного шаблона для реализации CQRS.

Простой пример шаблона, нарушающего CQRS, но полезного в многопоточном ПО:

private int x;
public int increment_and_return_x()
{
  lock x;   // какой-либо механизм блокировки
  x = x + 1;
  int x_copy = x;
  unlock x; // какой-либо механизм блокировки
  return x_copy;
}

Распространенный CQRS шаблон, применимый только в однопоточных приложениях:

private int x;
public int value()
{
  return x;
}
void increment_x()
{
  x = x + 1;
}

Даже в случае однопоточных программ иногда можно утверждать, что значительно более удобно иметь метод, объединяющий запрос и команду. Мартин Фаулер приводит метод стека pop() в качестве примера.[1]

См. также

Примечания

Ссылки

  • Meyer Bertrand Object-oriented Software Construction. — Prentice Hall, 1988. — ISBN 0-13-629049-3 (англ.)

External links


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "CQRS" в других словарях:

  • Falun Gong — The Falun Dafa emblem Traditional Chinese 法輪功 Simplified Chinese …   Wikipedia

  • Domain-driven design — (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts.[1] The premise of domain driven design is the following: Placing the project s primary focus …   Wikipedia

  • Chronologie De L'histoire Du Québec (1960 À 1981) — Chronologie de l histoire du Québec 1931 à 1959 1960 à 1981 1982 à aujourd hui Cette section de la Chronologie de l histoire du Québec co …   Wikipédia en Français

  • Chronologie de l'histoire du Quebec (1960 a 1981) — Chronologie de l histoire du Québec (1960 à 1981) Chronologie de l histoire du Québec 1931 à 1959 1960 à 1981 1982 à aujourd hui Cette section de la Chronologie de l histoire du Québec co …   Wikipédia en Français

  • Chronologie de l'histoire du Québec (1960 à 1981) — Chronologie de l histoire du Québec 1931 à 1959 1960 à 1981 1982 à aujourd hui Cette se …   Wikipédia en Français

  • Chronologie de l'histoire du québec (1960 à 1981) — Chronologie de l histoire du Québec 1931 à 1959 1960 à 1981 1982 à aujourd hui Cette section de la Chronologie de l histoire du Québec co …   Wikipédia en Français

  • Germain Dulac — Pour les articles homonymes, voir Dulac. Germain Dulac est sociologue spécialiste de la condition masculine et paternelle et de la sociologie des genres. Il détient un doctorat en sociologie de l’Université du Québec à Montréal (UQAM) (1990), et… …   Wikipédia en Français

  • Шаблон проектирования — У этого термина существуют и другие значения, см. Паттерн. В разработке программного обеспечения, шаблон проектирования или паттерн (англ. design pattern) повторимая архитектурная конструкция, представляющая собой решение проблемы… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»