Я работаю над переписыванием своего приложения ASP.NET MVC с использованием принципов проектирования, ориентированных на предметную область. Я пытаюсь проверить свою сущность пользователя. До сих пор я мог проверить основные правила (, такие как имя пользователя и пароль, являющиеся строкой, отличной от null/пробелов ). Однако одно из правил, мне нужно убедиться, что имя пользователя уникально. Однако для этого мне нужен доступ к базе данных, а это значит, что мне нужно будет внедрить свой IUserRepository в мою сущность User.
public class User
{
private readonly IUserRepository _userRepository;
public User(IUserRepository repo)
{
_userRepository = repo;
}
public override void Validate()
{
//Basic validation code
if (string.IsNullOrEmpty(Username))
throw new ValidationException("Username can not be a null or whitespace characters");
if (string.IsNullOrEmpty(Password))
throw new ValidationException("Password can not be a null or whitespace characters");
//Complex validation code
var user = _userRepository.GetUserByUsername(Username);
if (user != null && user.id != id)
throw new ValidationException("Username must be unique")
}
}
Однако это кажется... ну неправильным. Заставить мою сущность зависеть от моего репозитория кажется плохой идеей (поправьте меня, если я ошибаюсь ). Но наличие кода проверки в сущности имеет смысл. Где лучше всего разместить сложный код проверки?