public class Nome {
private String nome;
public Nome(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
}
```
Onde colocaria? no construtor um if?
```
if(nome.length == 0) {
exception;
}
```
bom enfim qual a melhor maneira?
Tiny type, onde colocar a validação?
3 Respostas
Essa seria sim uma das opções. Ou ainda deixar o construtor privado e ter apenas factory methods para isso. Nesse post mostramos algumas variações:
Nesse caso eu colocaria dentro do criaProjeto a validação, nesse caso se eu tivesse um criaPessoa, teria que repetir a validação, so que ela pode variar também o tamanho do campo Nome do projeto pode ser 120 e o Nome da pessoa poderia ser 60 né…
Ou… criaria um factory para os tiny types? (acho que ficaria meio estranho né ou não?);
Logo então seria melhor colocar dentro da criaProjeto/criaPessoa ou tens algo que pode recomendar a fazer? ou para min ler…
Acho que o artigo não dá um exemplo de como por a validação, mas não é no cria projeto. Seria na própria classe Nome e Descricao.
Como regra geral, eu prefiro ter a garantia que tiny types são sempre válidos e imutáveis, portanto eu proibo já na criação que ele seja inválido, ou seja, a validação fica direto no construtor.
Uma alternativa é criar um factory method, pois aí o código fica menor e um pouco mais legível (na minha opinião):
private Nome(String algumNome) { this.nome = algumNome; }
public static Nome nome(String nome) {
//valida aqui, joga exception se invalido
return new Nome(nome);
}
//ao inves de
algumMetodoQueUsaNome( new Nome("abel") );
//com import estático dá pra usar
algumMetodoQueUsaNome( nome("abel") );