Как вы обрабатываете ошибки чтения сторонних ключей в CQRS?

У вас есть таблица A и таблица B в вашей модели данных SQL, а таблица A имеет внешний ключ по отношению к таблице B. Теперь вы хотите перенести свою архитектуру CRUD в CQRS. Представьте себе следующий сценарий:

  • Вы получаете команду, чтобы сохранить новую запись A
  • Вы пишете в свой журнал добавления и обрабатываете его, обновляя ваше состояние
  • Сторона чтения забирает его и не может вставить в базу данных

В этой ситуации ваша сторона записи и чтения никогда не достигнет согласованности. Как вы обрабатываете ограничения на стороне чтения в CQRS? Если проверка происходит в сторону записи вместо этого?

1 ответ

Я верю, что вы можете получить вдохновение от этого:

Как справиться с проверкой согласованности на основе набора в CQRS?

Суть в том, что новый агрегат A должен быть создан другим агрегатом, скажем, C (создатель). В этом случае C содержит список всех идентификаторов A, так что проверка может быть выполнена на уровне совокупности вместо модели представления.

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

Другие вопросы по тегам