Bean "Suspeito"

7 respostas
pedromuyala

Ola pessoal, :stuck_out_tongue:

:arrow: Tenho um Bean UsuarioModel.java com set’s/get’s da seguinte forma:

class UsuarioModel {
   
   String nome;
   long cpf;

   UsuarioModel(String nome, long cpf) {
      this.nome = nome;
      this.cpf = cpf;
   }
   
   void setNome(String nome) {
      this.nome = nome;
   }

   String getNome() {
      return nome;
   }

   void setCpf(long cpf) {
      this.cpf = cpf;
   }

   String getCpf() {
      return cpf;
   }
}

:arrow: A View tem um JTextField que manda o cpf como String (números e pontos/letras).

:?: Agora vem a pergunta: Onde coloco a função de conversão de String para long? Ou seja, devo criar um set com assinatura String “setCpf(String cpf);” e trabalhar dentro dele a conversão? :idea:

7 Respostas

B

pedromuyala:

:?: Agora vem a pergunta: Onde coloco a função de conversão de String para long? Ou seja, devo criar um set com assinatura String “setCpf(String cpf);” e trabalhar dentro dele a conversão? :idea:

Exatamente.

O ideal seria criar uma classe CPF que recebesse long ou String no construtor. Ajuda bastante na hora de ter que formatar o documento.

AndreAlves

Eu colocaria em uma classe de utilidades (tipo StringUtil) e chamaria na camade de controle (MVC).

pedromuyala

Ok. Crio então uma classe específica (CPFUtilits.java) para receber o CPF nas diversas formas diferentes que ele fosse passado pela View.

No caso, criaria o objeto cpfformart em UsuarioControl.java (Controle)…

// Classe UsuarioControl.java

String CPF = view.getCPF(); // "[CPF removido]"
CPFUtilits cpfformat = new CPFUtilits(cpf);

…e passaria o retorno dele para o Bean usando o setCPF(long cpf).

// Classe UsuarioControl.java

UsuarioModel user = new UsuarioModel();
user.setCpf(cpfformat.getCpf());

Correto?

:?: Agora me diga: Se eu mudar a assinatura do setCPF(long cpf) para setCPF(String cpf) em UsuarioModel.java (1º post mostrado o código) e criar o objeto cpfformat dentro do set… estaria “infringindo” o Bean, criando aí sim um “Bean Suspeito”?

B

Colocando numa classe CPF daria pra aproveitar métodos como o toString(), que várias tecnologias do Java chamam diretamente para obter uma representação gráfica do objeto.

Sem falar que você estará encapsulando o código, o que é uma boa prática.

Outro benefício é usar métodos que tomem o tipo do dado em consideração, fazendo utilizando o sobrecarregamento de métodos para alcançar um polimorfismo maior.

Esse padrão (de projeto?) é chamado Tiny Type.

AndreAlves

Acho que uma solução interessante seria uma mistura da solução proposta pelo Bruno com a minha solução.
Colocar o método de formatação do CPF fora do bean Usuario faz com que este método possa ser reaproveitado por outras classes de negócio.

Usando o padrão proposto pelo Bruno você encapsula a regra de formatação no objeto de negócio.

pedromuyala

:idea: Então se eu criar a classe CPFUtils.java, o meu Bean (Model) ficará assim:

class UsuarioModel {   
     
   String nome;   
   CPFUtils cpf;  // Mudado de "long cpf;" para "CPFUtils cpf;"
  
   UsuarioModel(String nome, long cpf) {   
      this.nome = nome;   
      this.cpf = cpf;   
   }   
     
   void setNome(String nome) {   
      this.nome = nome;   
   }   
  
   String getNome() {   
      return nome;   
   }   
  
   void setCpf(CPFUtils cpf) {   
      this.cpf = cpf;   
   }   
  
   CPFUtils getCpf() {   
      return cpf;   
   }   
}
pedromuyala

:?: O Bean acima procede ou está errado quebrando regras de um Bean?

Criado 27 de abril de 2009
Ultima resposta 28 de abr. de 2009
Respostas 7
Participantes 3