Перед созданием я проверяю, существует ли уже имя пользователя для выдачи исключения;однако, когда пользовательские запросы выполняются параллельно, мой код не помешает хранить повторяющиеся имена пользователей.
Общий термин для того, чего вы пытаетесь достичь, это проверка правильности установки .
Если вам нужно убедиться, что любое изменение члена набора удовлетворяет некоторому инварианту, то это означает, что сам набор - это то, что вам нужно иметь возможность загружать в память.Таким образом, ваша модель домена может включать в себя сущность реестра пользователей, и все модификации пользователей проходят через реестр.
Когда вы имеете дело с уникальностью , другой возможностью является использование самого уникального свойства какпервичный ключ (либо в виде естественного ключа, либо в виде хэша), а затем напишите свои ограничения, чтобы гарантировать, что два разных пользователя не будут храниться под одним и тем же ключом.
(есть ли пользователи в вашем домененесколько адресов электронной почты? они меняют адреса?)
Возможно, сопоставление адреса электронной почты с пользователем является отдельным отношением от самого пользователя.Или что пользователь, претендующий на управление адресом электронной почты, представляет собой отдельную информацию из проверки того, что пользователь контролирует этот адрес электронной почты.
(Короче говоря, информация о моделировании, которой управляет ваша система, отличается отинформация о моделировании, которую контролирует другая система).