У меня возникли некоторые затруднения с пониманием того, что на самом деле представляет собой шаблон CQRS, то есть какие красные линии означают, что при пересечении мы не реализуем шаблон CQRS.
Я четко понимаю шаблон CQS.
Предположим, что мы внедряем микросервисы с CQRS без источника событий.
1) Первый вопрос: применяется ли шаблон CQRS только к клиентскому вводу / выводу?Это означает, что, надеюсь, я правильно понял, что, например, клиент обновляет данные с помощью контроллеров, которые записывают в базу данных A, но читают, запрашивая контроллеры, которые записывают в базу данных B (B в конечном итоге обновляется и может собирать информацию из нескольких моделей с использованием событий, отправленныхконтроллер А).
Или речь идет не о клиенте, а о чем-нибудь, например, о другом микросервисе для чтения / записи?И если последнее, то какова на самом деле граница, которая определяет, кто является читателем / писателем, который вызывает сегрегацию?Может быть, это связано с доменами в DDD?
Это важный вопрос, на мой взгляд, потому что без него CQRS является просто взаимозависимостью модели B, обновляемой моделью A, а не наоборот.,И почему бы это не распространить от модели B к модели C, например?
Я также читал статьи, в которых говорится, что некоторые люди реализуют CQRS, имея одну командную службу и одну службу запросов, что еще более усложняет задачу.this.
2) Как и в первом вопросе, почему некоторые ссылки говорят о событиях, как будто они являются командами CQRS?На мой взгляд, это усложняет CQRS, поскольку с технической точки зрения одним событием запроса мы можем запросить услугу «Эй, пожалуйста, дайте мне информацию X», и служба может ответить событием, содержащим полезную нагрузку, эффективно выполняя запрос.Это жесткое правило или просто пример, подтверждающий, что мы можем обновлять с помощью событий и выполнять запросы с использованием REST?
3) Что если в большинстве случаев я пишу в модель А и читаю измодель B, но в некоторых случаях я читал непосредственно из модели A?Я нарушаю CQRS?Что если мои запросы очень просты, должен ли я дублировать модель A в этой ситуации?
4) Что если, как указано в вопросе 1), я читаю из модели A для генерации событий, чтобы создать модель B,но потом мне нравится читать некоторую информацию из модели B, потому что она ценна, потому что она агрегируется, чтобы создать модель C?Я нарушаю CQRS?Что делает контроллер, который заполняет модель B, в этом случае, например, если он также генерирует события для заполнения модели C?В любом случае, это просто команда, потому что это не та часть, которая запрашивает, поэтому мы по-прежнему применяем CQRS?
Кроме того, что если мы читаем из модели A, чтобы генерировать события, чтобы создать модель B, но пока мы производимМодель B, мы излучаем события, для отправки клиентских уведомлений.Это все еще CQRS?
5) Когда нарушается CQRS?Если у меня есть контроллер, который читает из модели B, но также выдает сообщение, которое обновляет модель A, это так?
Наконец, если этот контроллер, например контроллер REST, читает из модели B и одновременно выдаетсообщение об обновлении модели A, но без какой-либо информации из того, что было прочитано из модели B (таким образом, операция - два в одном, но она не использует информацию из B для обновления A), это все еще CQRS?
И что, если контроллер REST, который обновляет модель A, также возвращает клиенту некоторую информацию, считанную из A, нарушает ли CQRS?Что если это просто идентификатор?А что, если идентификатор не читается из A, но это просто ссылочный номер, который генерируется случайным образом?Есть ли проблема в этом случае, потому что контроллер REST обновляет, но также что-то возвращает пользователю?
Я буду очень признателен за ваше терпение, так как видно, что я все еще в замешательстве и что яучусь!