У меня есть вопрос, связанный с проверкой сущности. Например, есть Пользователь
, который может быть зарегистрирован в системе с учетом адрес электронной почты
и пароль
. Бизнес-правило гласит:
адрес электронной почты
должен быть действительным (должен соответствовать формату электронной почты) и уникальным;пароль
должен быть между 6 и 20 символами.Моя первоначальная мысль состояла в том, чтобы поместить проверку в User.Register(email, password)
. Основное преимущество этого подхода заключается в том, что User
контролирует как он регистрируется, проверяя правильность регистрационных данных. Недостатком является то, что проверка уникальности электронной почты требует вызовов UserRepository
, поэтому User
может зависеть от своего Repository
.Чтобы решить эту проблему, проверка электронной почты и пароля может быть отнесена к некоторым объектам BusinessRule
. Таким образом, проверка в методе User.Register()
может выглядеть следующим образом:
var emailValidationErrors = _emailRule.Validate(email);
var passwordValidationErrors = _passwordRule.Validate(password);
где _emailRule
и _passwordRule
могут быть переданы в качестве аргументов конструктора: User(EmailRule emailRule, PasswordRule passwordRule).
В этом случае User
не связан напрямую с UserRepository
. Таким образом, правила явно отображаются в домене, что делает его более выразительным.
Итак, вопрос: что вы думаете об этом подходе? Есть ли другие решения?