Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Testes com Classes Mutáveis

Queria saber se é uma boa prática, ao ter uma classe mutável instanciar a mesma e ir usando seus setters como abaixo, ao invés de ter todos os parâmetros internos de Leilao e só no final instanciar tudo.

Parece-me que instanciar tudo deve ser usado sempre que a mesma for imutável. É isso mesmo?

package br.com.caelum.pm73.dominio.builder;

import java.util.Calendar;

import br.com.caelum.pm73.dominio.Leilao;
import br.com.caelum.pm73.dominio.Usuario;

public class LeilaoDataBuilder {
    private Leilao leilao = new Leilao("PlayStation 4", 1000.0, new Usuario("Dono", "dono@gmail.com"), false);

    public static LeilaoDataBuilder builder(){
        return new LeilaoDataBuilder();
    }

    public LeilaoDataBuilder com(String nome){
        leilao.setNome(nome);

        return this;
    }

    public LeilaoDataBuilder tendoComo(Usuario dono){
        leilao.setDono(dono);

        return this;
    }

    public LeilaoDataBuilder abertoHoje(){
        leilao.setDataAbertura(Calendar.getInstance());

        return this;
    }

    public LeilaoDataBuilder abertoDiasAtras(int quantidadeDiasAtras){
        Calendar dataAbertura = Calendar.getInstance();
        dataAbertura.clear(Calendar.HOUR_OF_DAY);
        dataAbertura.clear(Calendar.MINUTE);
        dataAbertura.clear(Calendar.SECOND);
        dataAbertura.clear(Calendar.MILLISECOND);
        dataAbertura.add(Calendar.DAY_OF_MONTH, -quantidadeDiasAtras);

        leilao.setDataAbertura(dataAbertura);

        return this;
    }

    public LeilaoDataBuilder usado(){
        leilao.setUsado(true);

        return this;
    }

    public LeilaoDataBuilder encerrado(){
        leilao.encerra();

        return this;
    }

    public Leilao construir(){
        return leilao;
    }
}
2 respostas

O melhor é não mexer no estado do objeto depois que ele foi criado.. mutabilidade, por mais que muitas vezes seja necessária, deixa o código sempre mais complicado de ler. Você nunca sabe se o estado do objeto está como deveria estar naquele instante.

solução!

Ok. Eu também gosto de trabalhar com imutabilidade de forma geral, mas nesse caso como o Leilao é mutável e o dataBuilder que encapula ele só é usado para facilitar os testes não sendo compartilhado entre Threads não seria uma boa ao invés de termos n campos replicados no databuilder que são cópias das variáveis de instâncias do leilão, usarmos o leilao para setarmos cada valor?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software