Duvida sobre validação de atributos

8 respostas
Zeed01

Boa noite colegas !

Bom, considerando um exemplo de interface grafica para manutenção em uma tabela de usuários.

Então tenho uma tela onde o usuário do sistema entra com os dados (CadastroUsuario.java) que possui os botões e textfields ,uma classe DAO que acessa o banco e que faz inserts e updates (UsuarioDAO.java), uma classe que serve como ligação entre a interface grafica e a DAO (UsuarioModel.java) e uma classe que representa um objeto Usuario (Usuario.java) que possui os getters e setters para os atributos de um usuário.

Minhas dúvidas são as seguintes:

-Supondo que por exemplo o atributo Login do objeto Usuario não possa ser branco, onde devo colocar essa validação: no método setLogin do Usuario ou na classe UsuarioModel antes de chamar o método insereUsuario que vai persistir esses dados ?
-Seja na classe Usuario ou na UsuarioModel, como devo sinalisar que o atributo login não pode ficar em branco, lançando uma Exception ou somente dando uma mensagem ?
-Supondo agora que o campo Login, no banco de dados não pode se repetir e sendo ele digitado pelo usuário, onde devo fazer a verificação de que o login digitado já existe, na classe UserModel (onde estariam minhas regras de negócio) ou na classe DAO (que da o insert no banco) ?
-E novamente, como devo avisar que o login esta duplicado, lançando uma exceção ou somente dando uma mensagem ?

Desculpem pelas dúvidas, bobas talvez, mas estou começando…

Desde já meu muito obrigado a todos !

Um abraço.

8 Respostas

Zeed01

Para qual dos casos, os dois ?

No caso do atributo que não pode ser branco, essa validação não deveria ser na classe Usuario ? Como no exemplo de conta corrente usado em livros onde não se pode fazer um saque negativo ?

E sobre a forma de sinalisar que o dado é inválido: Exceptiou ou só uma mensagem ?

Obrigado.

alberto_ribeiro

Bom dia, referente a validação dos campos para não serem nulos, crie uma classe por exemplo UsuarioValidator e dentro dele você valida os campos, crie uma exceção do tipo UsuarioValidatorException e jogue a exceção para cima com a msg de campo está nulo até a ultima camada e apresente de uma melhor maneira na tela,
referente a existencia de um mesmo login quando os dados forem passados para sua camada DAO faça um select no banco e verifique se ja existe e se existir lance uma exceção com uma mensagem de login ja existe até a ultima camada…

[]'s espero ter ajudado…

Zeed01

Bom dia…

Acho que entendi a maneira como você explicou, mas por exemplo, se eu tenho uma classe Usuario e uma classe UsuarioValidator, como deixo as duas classes “ligadas” ?
Minha pergunta é porque se a validação esta em uma classe separada acho que seria interessante ter uma forma de não permitir que seja criado um Usuario sem utilizar a classe UsuarioValidator para validar os valores. Existe algum inconveniente de colocar essa validação nos metodos setters ?

[]s.
E sim, ajudou muito !!!

alberto_ribeiro

Boa tarde, então eu pensei dessa forma:

Classe Usuario:

public class Usuario {
 
 private String nome;

get e set

}

Classe UsuarioValidator

public class UsuarioValidator {

  public booelan validaNome(Usuario user){
   if(user.getNome() == null){
     throw new UsuarioValidatorException("O nome está nulo");
   }

  }

}

Vamo supor que aqui seja uma classe intermediaria entre Application e Banco de dados.

public class TransferiDadosParaDao {
 
  private UsuarioValidator userValidator;

  public void saveUsuario(Usuarios user) {
      userValidator = new UsuarioValidator();

     if(userValidator.validaNome(user)){
         dao.save(user);
     }

  }

}

Olha para ser um padrão JavaBean nos métodos get e sets não costuma colocar validações, não sei como o pessoal por ai usa, mas eu costumo fazer assim, criando classes de validações…

[]'s

obs fiz de cabeça tem tratamento de exceções e tal mais nem coloquei try e catch…

Zeed01

A pergunta talvez soe estranha… mas sabe como é: pergunta de novato.

-Qual a vantagem de enquadrar a classe como um JavaBean ?
-Acho que li no livro do Deitel, na parte de Básico de OO, que a classe deve ser responsável por garantir a criação de objeto corretamente, ou seja, a classe Usurio deveria saber o que uma instancia sua pode ou não receber como atributo… como fica esse princípio ?

-Voltanto ao seu exemplo… a classe UsuarioValidator é uma classe interna ?

Muito obrigado pela dica.

[]s

alberto_ribeiro
Voltanto ao seu exemplo... a classe UsuarioValidator é uma classe interna ?

A classe UsuarioValidator não é uma classe interna.

Qual a vantagem de enquadrar a classe como um JavaBean ?

Normalmente um javabean serve para você tranferir os dados de camadas em camadas.

Acho que li no livro do Deitel, na parte de Básico de OO, que a classe deve ser responsável por garantir a criação de objeto corretamente, ou seja, a classe Usuario deveria saber o que uma instancia sua pode ou não receber como atributo... como fica esse princípio ?

Isso blz pois a classe deve ser bem definida e ter métodos que sejam coesos, exemplo você cria uma classe que contém métodos para manipulação de arquivos ai você vai la e inclui um método de soma dentro desta classe, com isso você está aumentando a responsabilidade da sua classe sendo que era mais fácil criar uma nova classe Calculadora com este método de soma…

Referente a colocar ou não validação dentro do bean fica a seu critério em todas empresas que passei criamos validator’s, mas já vi pessoas que não criaram…

não sou o sr da razão e do saber mas isso é minha opnião…

[]'s

Zeed01

Valeu pelas dicas !

[]s

JMan

Você deve ter uma camada control para isso.

Criado 5 de junho de 2007
Ultima resposta 5 de jun. de 2007
Respostas 8
Participantes 3