Olhando as dúvidas que já tinham no fórum, encontrei essa: https://cursos.alura.com.br/forum/topico-duvida-como-rodar-o-program-cs-50455
Porém ao meu ver você não esta usando chain of responsibility se você instância RespostaEmCSV e RespostaEmXML. Se for criado no Program.cs o que o colega sugeriu, nunca o código irá cair nos "else OutraResposta.Responde(req, conta);", pois você esta chamando diretamente o método Responde no formato que você deseja.
Por isso, eu implementei de outra forma o Program.cs
Conta conta = new Conta("Jaqueline", 2000);
Formatador formatador = new Formatador();
formatador.Formata(new Requisicao(Formato.CSV), conta);
formatador.Formata(new Requisicao(Formato.XML), conta);
formatador.Formata(new Requisicao(Formato.PORCENTO), conta);
Eu criei outra classe chamada Formatador que recebe uma Requisição e um Conta.
public class Formatador
{
public void Formata(Requisicao requisicao, Conta conta)
{
IResposta f1 = new RespostaXml();
IResposta f2 = new RespostaCsv();
IResposta f3 = new RespostaPorcento();
f1.OutraResposta = f2;
f2.OutraResposta = f3;
f1.Responde(requisicao, conta);
}
}
A classe Fomatador é quem uni a corrente, assim como a classe CalculadorDeDescontos mostrada na videoaula.
Porém, analisando o código eu não vejo a utilidade da classe Requisicao que foi sugerida a ser criada. Eu poderia passar diretamente o enum para o metodo Formata da classe Formator.
formatador.Formata(Formato.CSV, conta);
E modificar os tipo de classe resposta para, por exemplo:
public class RespostaCsv: IResposta
{
public IResposta OutraResposta { get; set; }
public void Responde(Formato formato, Conta conta)
{
if (formato == Formato.CSV)
Console.WriteLine(conta.Titular + ";" + conta.Saldo);
else
OutraResposta.Responde(req, conta);
}
}
Faz sentido?
Acho que não esta muito claro pra mim o que era pra ser desenvolvido. Alguém poderia me ajudar em entender como deveria ser feito o Program.cs e como o Padrão Chain of Responsibility esta sendo utilizado?