Dúvida com validação de dados no construtor

4 respostas
R

Boa tarde pessoal.

Tenho uma dúvida com relação ao método construtor e os set de uma classe:

A classe “Pessoa”, possui campos como, telefone, email, etc. Estes atributos devem ser validados, para não correr o risco de ser criado objetos inconsistentes. Também, quando instanciado, um objeto do tipo “Pessoa” deve receber por padrão alguns valores, como o nome, telefone, email. Devo assim fazer duas validações desses dados? Uma no método construtor e outra no set? Pois pelo que andei lendo, não se deve chamar métodos set direto no construtor, quando a classe em questão não é do tipo final.

Qual a melhor maneira para se resolver essa questão?

Agradeço desde já. Abraços!

4 Respostas

S

desconheço essa informação, acredito que possa usar os setters dentro do construtor da própria classe. Eu sempre usei justamente para validação de dados.

R

Sandro, primeiramente obrigado pela resposta.

Sobre o que falei, eu encontrei isso aqui no próprio site, segue o link: Método set descarta necessidade de construtor?

Perceba o comentário do ViniGodoy.

Abraços!

P

vc tem que pensar assim: o seu construtor precisa ser capaz de construir (ahá) um objeto valido.

se o objeto tiver um telefone invalido ( tipo 2345MEIA78 ) então o objeto é invalido?

via de regra, seu Construtor deve ser simples, legivel. se ele começa a ser complexo vc deve pensar

1- sera que sua classe não é muito grande, fazendo coisas demais, podendo ser quebrada em classes menores usando composição?
2- sera que vc não precisa de uma Fabrica de objetos ( padrão Factory ) ?
3- sera que vc não precisa de um IoC/ injecão de dependencias na criação e ciclo de vida dos seus objetos?

as vezes, para objetos que vão representar algo util, vc pode começar com um objeto “em branco” e ir adicionando informações. nesse caso o construtor pode ser omitido. A pessoa nao tem nome, nao tem nada? sera que faz sentido? as vezes pra constuir dados a partir de um arquivo pode ser interessante vc ter menos regras, menos validações, e verificar a integridade de outra forma ( metodo isValid, por exemplo, ou vc pode usar um validador externo ).

como sempre, veja o que faz sentido na sua modelagem

cuidado se vc tem herança.

S

poisé foi bom você me apontar isso, o fato é que as classes que eu faço validação geralmente são final.

Criado 6 de setembro de 2016
Ultima resposta 6 de set. de 2016
Respostas 4
Participantes 3