[RESOLVIDO] Validação na Entidade

2 respostas
S

Fala ae galera..
Estava fazendo o curso de OO da caelum e apareceu uma dúvida que o professor não conseguiu me ajudar..

Estou programando java para desktop e tenho um campo de preço, que recebe uma máscara DecimalFormat quando o usuário sai do campo. Na hora que ele manda cadastrar, a mascara é retirada, o valor transformado em double e passado para a classe entidade.. Ta funcionando normal. A minha dúvida é o seguinte: Em OO, é sempre recomendável deixar as validações em um lugar só, certo? Então na classe de entidade fiz assim:
public class EntPlano {
	
	@Column(name="pla_preco1")
	private double preco1;
	
	public double getPreco1() {
		return this.preco1;
	}
	public void setPreco1(String preco1) {
		if(UtiMoeda.desmascararDinheiro(preco1).equals("")){ 
			this.preco1 =0;
		}else{
			this.preco1 = Double.parseDouble(UtiMoeda.desmascararDinheiro(preco1));
		}
	}
	
	//outros getters e setters
	
}
Na tela, ao passar valor, faço assim..
ePlano = new EntPlano();
ePlano.setPreco1(txtPreco1.getText().toString());

Imagino que este não é o jeito mais correto, mas ainda não encontrei nada no google sem atrapalhar o Hibernate..
Se tiver qualquer dica eu agradeceria mto..

Valeu.. :wink:

2 Respostas

B

Não necessariamente.

Um método não deve aceitar qualquer coisa jogada dentro dele, existe um Contrato que deve ser seguido, normalmente escrito no JavaDoc do método, como por exemplo, “Lançarei um NullPointerException caso me passarem um nulo”.

Segundo, que para mitigar o número de validações, podemos também passar objetos já validados para o método. Por exemplo, esse teu setPreço, poderia receber um tipo Moeda no lugar de um String. Daí você não precisa mais se preocupar com a formatação de strings, que fica ao cargo de quem for instanciar uma Moeda.

Então pode sim haver um processo de validação dividido em várias fases e classes, que como um todo validam o processo e os objetos. Mas no geral, uma instância de uma classe deve sempre estar válida, na própria criação do objeto deve-se rejeitar qualquer parâmetro que o deixe inválido.

Veja também: Factory method pattern, Builder pattern

S

Muito obrigado pela resposta Bruno…
Entendi bem alguns pontos, outros nem tanto… mas creio que lendo melhor os arquivos passados eu consiga entender…
Resolvi pegar emprestado com um amigo o “Use a cabeça: Design Patterns”… é por aí que tenho que seguir né?

Se algum mais tiver algum site de explicação seria bem vindo…

Criado 26 de setembro de 2012
Ultima resposta 26 de set. de 2012
Respostas 2
Participantes 2