Комплексная проверка модели предметной области DDD

Я работаю над переписыванием своего приложения 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")
    }
}

Однако это кажется... ну неправильным. Заставить мою сущность зависеть от моего репозитория кажется плохой идеей (поправьте меня, если я ошибаюсь ). Но наличие кода проверки в сущности имеет смысл. Где лучше всего разместить сложный код проверки?

9
задан Stefan Bossbaly 14 August 2012 в 17:09
поделиться