Скажите, что у меня есть таблица User в моей базе данных ReadDatabase (используйте SQL Server).В базе данных regulare для чтения / записи я могу поместить индекс в таблицу, чтобы убедиться, что 2 пользователя не добавлены в таблицу с одинаковым адресом электронной почты.
Так что, если я попытаюсь добавить пользователя сАдрес электронной почты, который уже существует в моей таблице для другого пользователя, сервер sql выдаст исключение.
В Cqrs я не могу этого сделать, поскольку, если я отделю запись в мои readdatabas из модели домена, с помощьюпомещая его в асинхронную очередь, я не получу возвращенное исключение, и я верну «ОК» в пользовательский интерфейс, и пользователь будет думать, что он добавлен в базу данных, когда фактически он никогда не будет добавлен в базу данных для чтения..
Я могу выполнить поиск в базе данных для чтения, проверяя, есть ли уже пользователь в моей базе данных с адресом электронной почты, и если он есть, через исключение обратно в пользовательский интерфейс.Но если они одновременно нажмут кнопку сохранения, я сделаю 2 проверки в базе данных и увижу, что в базе данных нет ни одного пользователя с адресом электронной почты, я отправлю обратно, что все в порядке.Поместите его в мою очередь, и позже он потерпит неудачу (нажав уникальный идентификатор).
Предполагается ли загрузить всех пользователей из моего EventSource (это SQL Server), а затем выполнить проверку этой коллекции, чтобыпосмотреть, есть ли у меня пользователь, который уже имеет этот адрес электронной почты.Мне это тоже кажется немного сумасшедшим ...
Как вы, люди, решили это?
Я могу видеть, что я не использую асинхронизированную очередь, но использую синхронизированную, но это очень плохо повлияет на производительность, особенно когда у вас есть много «хранилищ для чтения» для записи в ...
Нужна помощь здесь ...