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

Duvida na implementação do SOLID

Olá, entendi bem o conceito do OCP e DIP e concordo que a aplicação destes conceitos vão deixar a classe mais estável. Porém preciso de uma ajuda em uma dúvida: vai chegar um momento no meu código que vou ter que ter um monte de IF's e vai mudar com novos requerimentos que possam surgir. Seguindo o seu exemplo, suponha que a tabela de preço vai ser dependente do tipo de cliente. A classe CalculadoraDePreco não vai ser alterada pois depende de abstrações, mas que chama não vai precisar de um monte de IF's não? Para exemplificar em código : ITabelaPreco tabela; if (cliente.tipo == tipo.especial) tabela = new tabelaClientesEspeciais(); else if (cliente.tipo = tipo.vip) tabela = new tabelaClientesVip; else tabela = new tabelaPadrao; endif Ou tem uma outra forma de persistir o tipo de tabela do cliente e instancia-la?Obrigado, Leonardo

4 respostas

Oi Leonardo, vc tem razão, vai sim. Só que aí entra as Factories da vida etc, para vc ir reduzindo os ifs. Exemplo:

for(TabelaPreco tabela : tabelasPossiveis){
    if(tabela.aceita(cliente){
    return tabela;
    }
}

Você joga os ifs de lógica para a classe específica e não precisa mais encher de ifs no for de decisão :).

solução!

Legal, vivendo e aprendendo. Obrigado pela explicação! Mais uma pergunta: tem alguma forma de persistir o tipo de tabela com os dados do cliente e instanciar a classe quando os dados forem recuperados?

Opa, acho que rola sim. Você teria que apelar para um pouco de Reflection.

Alberto, muito obrigado! É o famoso entendi mas não compreendi. Mas você já deu um caminho por onde devo trilhar e agora é comigo e com o Google :D Novamente obrigado pela atenção!