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

Dúvida no Ex. 5 da Aula 3 - Muitos Descontos e o Chain of Responsibility

Não precisamos aqui de um tipo de resposta final, para quando as demais não satisfazerem? Pois se o usuário entrar com algum valor diferente do esperado, poderemos ter um loop infinito, não?

5 respostas

Bom, no exercício seguinte obtive a resposta: definimos o próximo como null, e verifcamos depois. Se ele for null, lançamos uma exceção.

Mas ainda assim, me pareceu uma coisa meio ruim. Afinal, classe agora tem que saber se ela é ou não final. A abordagem inicial, ainda que maior, me pareceu mais desacoplada, não? A classe só sabe que ela tem que chamar outra, não precisa ela saber se ela é a última ou não.

Oi Luis! Primeiramente, sua pergunta foi muito inteligente, porém não tenho uma resposta fechada, só uma reflexão.

Pelo o que eu entendi, na sua visão, se a classe guarda a lógica se chama ou não o próximo desconto (testa null), ela pode estar com muita responsabilidade (saber se chama o próximo), o que daria maior peso para a solução que cria uma classe em separada para indicar o final da cadeia. Certo?

Eu também gosto da solução que testa o null para saber se chama o próximo, porque assim posso remanejar os elementos da cadeia sem me preocupar em finalizá-la com uma classe específica para indicar seu fim. Além disso, a lógica se testa se há alguém próximo na fila é inerente ao nó do chain, ao meu ver, e essa comportamento poderia estar conectado com o dado em que operada (o atributo proximoDesconto).

Outra solução seria aplicar o template Method tornando claro para a implementação de cada nó da chain que deve testar se existe um próximo. São várias soluções possíveis.

Luis, no final, acho que o que vale realmente é chegar em um denominador comum e ficar com uma das soluções, para evitar que cada um em sua equipe resolva o problema do seu jeito.

Espero ter contribuído com algo.

solução!

Oi Flávio, obrigado pela resposta. Acho que de certa forma acabei soando até um pouco "purista", na busca de um "método ideal de fazer", mas no fim, sei que não existe bala de prata e o ideal é irmos avaliando caso a caso. :)

Quanto ao Template Method, eu acho que é a próxima aula.

Obrigado pela reflexão e ajuda.

Abraços.

Vamos deixar mais dois dias aqui sua pergunta aberta para ver se mais alguém responde. Depois desse período posso fechar?

Abraço

Sim, de acordo. :-)