Tiny type, onde colocar a validação?

3 respostas Resolvido
Robertoalvespereira1
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?

3 Respostas

Paulo_Silveira

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:

Robertoalvespereira1

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…

A
Solucao aceita

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") );
Criado 24 de dezembro de 2015
Ultima resposta 25 de dez. de 2015
Respostas 3
Participantes 3