Как вы обрабатываете ошибки чтения сторонних ключей в CQRS?
У вас есть таблица A и таблица B в вашей модели данных SQL, а таблица A имеет внешний ключ по отношению к таблице B. Теперь вы хотите перенести свою архитектуру CRUD в CQRS. Представьте себе следующий сценарий:
- Вы получаете команду, чтобы сохранить новую запись A
- Вы пишете в свой журнал добавления и обрабатываете его, обновляя ваше состояние
- Сторона чтения забирает его и не может вставить в базу данных
В этой ситуации ваша сторона записи и чтения никогда не достигнет согласованности. Как вы обрабатываете ограничения на стороне чтения в CQRS? Если проверка происходит в сторону записи вместо этого?
1 ответ
Я верю, что вы можете получить вдохновение от этого:
Как справиться с проверкой согласованности на основе набора в CQRS?
Суть в том, что новый агрегат A должен быть создан другим агрегатом, скажем, C (создатель). В этом случае C содержит список всех идентификаторов A, так что проверка может быть выполнена на уровне совокупности вместо модели представления.
Если ваш вопрос носит более общий характер и вы спрашиваете, "как вы справляетесь с ошибками обновления модели представления", то это действительно зависит. Это может быть проблема проектирования (например, неправильная последовательность событий, отсутствие предварительных условий или инвариантных проверок), ошибка или другое. Обычно я блокирую эти объекты и отправляю их в список объектов, требующих ручного вмешательства, если нет автоматического исправления.