В последнее время я вижу все больше и больше дискуссий о применении паттерна CQRS там, где его на самом деле следует избегать. Итак, давайте разберемся — нужен ли вам CQRS? Я считаю, что в большинстве случаев действительно легко ответить на этот вопрос.
Но сначала давайте попробуем определить, что подразумевается под CQRS. Сама аббревиатура расшифровывается как Command Query Responsibility Segregation, и концепция этих слов довольно проста — операции чтения и записи в вашей системе должны быть разделены, что означает, что любая операция должна выполнять только чтение или запись, но не то и другое одновременно. Вот и все, все остальные вещи, часто связанные с этим подходом, — это разные шаблоны, которые не требуют от вас использования CQRS, но выигрывают от его применения. Другими словами, CQRS упрощает внедрение других вещей, таких как:
- Поиск событий
- Обмен сообщениями
- Дизайн, управляемый доменом
- Служебная шина предприятия
- Конечная согласованность
Поэтому, если вы планируете иметь несколько хранилищ данных (для чтения и записи) или если вы планируете добавить один или несколько шаблонов из приведенного выше списка — да, CQRS может упростить вам задачу. В противном случае это может сделать ваше приложение слишком сложным для того, что оно должно делать.
Одним из преимуществ, которое типичное CRUD-приложение может получить от CQRS, является работа с раздутыми контроллерами, но об этом позже.