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

Em qual pacote colocar classes do padrao builder

Em uma estrutura MVC foram criados os seguintes pacotes

em src/main/java:

br.com.empresa.model.entity
br.com.empresa.model.converter
br.com.empresa.dao

em src/test/java:

br.com.empresa.model.entity
br.com.empresa.model.converter
br.com.empresa.dao

Duvida 1) Seria uma boa prática separar as classes de Builder em um pacote exclusivo como "br.com.empresa.model.builder" ( a ser alocado em src/main/java) ?

Duvida 2) Em testes de diversas classes preciso criar um mesmo objeto. ex: new Cliente(1,"Jose"); Seria uma boa pratica criar uma classe de TestClienteBuilder que utilizaria a classe ClienteBuilder e retornaria um cliente padrao a ser retornado para uso nos testes?(veja codigo exemplo abaixo) Ou na propria classe ClienteBuilder estaria este método? No primeiro caso qual seria o nome apropriado (normalmente utilizado) para esta classe TestClienteBuilder? ClienteTestBuilder?

public class TestClienteBuilder {
    private ClienteBuilder builder;
    public TestClienteBuilder () {
    }
    public Cliente clientePadrao(){
        return new ClienteBuilder.comCodigo(1).comNome("Jose").build();
    }
        .. etc

}
3 respostas

Fala ai Rui, de boa ?

Cara então, é super legal colocar nesse tipo de pacote, você sabe onde ir buscar quando for necessário fazer uma alteração.

Sobre sua segunda dúvida, a gente deixa o usuário usar os métodos passando os parametros, as vezes quer simular algo.

solução!

Sobre a segunda duvida:

Sempre que preciso fazer um teste de uma classe que possua endereço tenho que no teste atribuir os dados do endereço para a classe EnderecoBuilder como abaixo.

        Pais pais = new Pais(1, "Brasil", 0);
        Estado estado = new Estado("MG", "Minas Gerais", 0, 12, pais, RegiaoBrasileira.SUDESTE);
        Cidade cidade = new Cidade(1, "Cidade qualquer", estado, 0, 0);
        Endereco endereco = Endereco.novoEndereco()
                .comLogradouro("Rua A")
                .comNumero("100")
                .comComplemento("sala 1000")
                .comBairro("Bairro qualquer")
                .comCidade(cidade)
                .comCep("00000000");

        Cliente cliente = new Cliente(1,"Jose",endereco);

Gostaria ao invés de escrever a criação do objeto Endereco a cada teste de uma nova classe que possua o atributo endereco, que através de uma outra classe o mesmo fosse criado com um dado padrão. O seu uso obviamente seria somente nas classes de teste. Existe esta prática no mercado? Se existe em qual pacote sugerem coloca-lo e com qual nome?

Exemplo do uso:

@Test
public void test(){
 Endereco endereço = new CriadorDeEnderecoParaTeste.enderecoPadrao();
Cliente cliente = new Cliente(1,"Jose",endereco);
}

Oi Ruy com o próprio padrão Builder você deveria ser capaz de retornar diferentes representações de criação do objeto. Uma delas poderia ser o objeto endereço padrão de teste já instanciado e configurado, no EnderecoTesteBuilder você passaria o objeto configurado.

Espero ter ajudado e bons estudos.