public Usuario criarUsuario(string nome, string login, string senha)
        {
            Check.Require(nome.Length >= Usuario.MIN_LOGIN_LENGTH,
                          string.Format("O nome deve ter no mínimo {0} caracteres", Usuario.MIN_NOME_LENGTH));
            Check.Require(login.Length >= Usuario.MIN_LOGIN_LENGTH,
                          string.Format("O usuário deve ter no mínimo {0} caracteres", Usuario.MIN_LOGIN_LENGTH));
            Check.Require(senha.Length >= Usuario.MIN_SENHA_LENGTH,
                          string.Format("A senha de usuário deve ter no mínimo {0} caracteres", Usuario.MIN_SENHA_LENGTH));

            Check.Require(nome.Length <= Usuario.MAX_NOME_LENGTH,
                          string.Format("O usuário não deve exceder {0} caracteres", Usuario.MAX_NOME_LENGTH));
            Check.Require(login.Length <= Usuario.MAX_LOGIN_LENGTH,
                          string.Format("O nome de usuário não pode exceder {0} caracteres", Usuario.MAX_LOGIN_LENGTH));
            Check.Require(senha.Length <= Usuario.MAX_SENHA_LENGTH,
                          string.Format("A senha do usuário não deve exceder {0} caracteres", Usuario.MAX_SENHA_LENGTH));

            Check.Require(login.ToLower() == login, "O login deve ser totalmente em minúsculo");
            Check.Require(LoginValidoSpecification.IsSatisfiedBy(login), "O login deve conter somente letras, números e \"_\"");
            Check.Require(SenhaValidaSpecification.IsSatisfiedBy(senha), "A senha deve conter somente letras e números");

            if (LoginEmUsoSpecification.IsSatisfiedBy(login))
            {
                throw new LoginJaExisteException(login);
            }

            return(new Usuario(nome, login, senha));
        }
 public UsuarioFactory(LoginJaExisteSpecification loginJaExiste, LoginValidoSpecification loginValido, SenhaValidaSpecification senhaValida)
 {
     this.LoginEmUsoSpecification  = loginJaExiste;
     this.LoginValidoSpecification = loginValido;
     this.SenhaValidaSpecification = senhaValida;
 }