3
respostas

SOLID + Regras de negócio (2)

class PessoaFisicaService{
...

public Collection<PessoaFisica> listarPessoasFisicas(...){
...
    Collection<PessoaFisica> pessoas = pessoaFisicaRepository.listarPessoasFisicas();

    for(PessoaFisica pessoa : pessoas){
        pessoa.setEnderecos(new EnderecoService(connnection).listarEnderecos(pessoa));
        pessoa.setContatos(new ContatoService(connnection).listarContatos(pessoa));
    }

    return pessoas;
    }
}

Nesse cenário onde uma classe de negócio depende de outras classes de negócio, como poderia aplica o SOLID? Pensei em criar uma abstração comum para todas as classes de negócio, mas não sei se seria uma boa ideia, já que uma classe de negócio pode ter mais ou menos métodos que outra. Pensei também em criar uma abstração para cada classe de negócio, mas não vi grande vantagem. Nesse exemplo, a classe de negócio de pessoa física conhece as implementações das classes de negócio de contato e de endereço.

3 respostas

Que cenário serio esse??

O cenário é esse do código, no qual PessoaFisicaService depende de EnderecoService e ContatoService :)

Eu faria da seguinte maneira. A minha classe: "PessoaFisicaService", trate somente de coisas relacionadas a pessoa física. No caso o método: "listarPessoasFisicas", retorne somente uma coleção de pessoa física. E mais duas classes: "EnderecoService" e "ContatoService" como você já tem hoje. E mudaria o lugar onde eu iria consumir os métodos que você esta consumindo dentro de "listarPessoasFisicas". Ficaria da seguinte maneira: primeiro pegaria a lista de pessoa física, após obtido esta lista, pegaria todos os endereços relacionado a cada pessoa, depois os contatos. Ficaria um pouco mais burocrático, mas não iria consumir as classes que esta consumindo dentro de "PessoaFisicaService".