DDD Проверка сущности

У меня есть вопрос, связанный с проверкой сущности. Например, есть Пользователь, который может быть зарегистрирован в системе с учетом адрес электронной почтыи пароль. Бизнес-правило гласит:

  1. адрес электронной почтыдолжен быть действительным (должен соответствовать формату электронной почты) и уникальным;
  2. парольдолжен быть между 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. Таким образом, правила явно отображаются в домене, что делает его более выразительным.

Итак, вопрос: что вы думаете об этом подходе? Есть ли другие решения?

8
задан Markus 10 March 2012 в 12:43
поделиться