Как мне представить двойные значения в моей базе данных для чтения с помощью CQRS - PullRequest
0 голосов
/ 29 июня 2011

Скажите, что у меня есть таблица User в моей базе данных ReadDatabase (используйте SQL Server).В базе данных regulare для чтения / записи я могу поместить индекс в таблицу, чтобы убедиться, что 2 пользователя не добавлены в таблицу с одинаковым адресом электронной почты.

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

В Cqrs я не могу этого сделать, поскольку, если я отделю запись в мои readdatabas из модели домена, с помощьюпомещая его в асинхронную очередь, я не получу возвращенное исключение, и я верну «ОК» в пользовательский интерфейс, и пользователь будет думать, что он добавлен в базу данных, когда фактически он никогда не будет добавлен в базу данных для чтения..

Я могу выполнить поиск в базе данных для чтения, проверяя, есть ли уже пользователь в моей базе данных с адресом электронной почты, и если он есть, через исключение обратно в пользовательский интерфейс.Но если они одновременно нажмут кнопку сохранения, я сделаю 2 проверки в базе данных и увижу, что в базе данных нет ни одного пользователя с адресом электронной почты, я отправлю обратно, что все в порядке.Поместите его в мою очередь, и позже он потерпит неудачу (нажав уникальный идентификатор).

Предполагается ли загрузить всех пользователей из моего EventSource (это SQL Server), а затем выполнить проверку этой коллекции, чтобыпосмотреть, есть ли у меня пользователь, который уже имеет этот адрес электронной почты.Мне это тоже кажется немного сумасшедшим ...

Как вы, люди, решили это?

Я могу видеть, что я не использую асинхронизированную очередь, но использую синхронизированную, но это очень плохо повлияет на производительность, особенно когда у вас есть много «хранилищ для чтения» для записи в ...

Нужна помощь здесь ...

1 Ответ

2 голосов
/ 29 июня 2011

Поиск проверки на основе набора CQRS даст вам решения этой проблемы.

Грег Янг написал о влиянии на бизнес возможной последовательности http://codebetter.com/gregyoung/2010/08/12/eventual-consistency-and-set-validation/

Jérémie Chassaing опубликовал сообщение об обнаружении недостающих совокупных корней в домене http://thinkbeforecoding.com/post/2009/10/28/Uniqueness-validation-in-CQRS-Architecture

Вопросы по переполнению стека:

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

...