PessoALL,
Dentro de:
- Design Pattern I: boas práticas de programação
- Muitos Descontos e o Chain of Responsability
Estou tentando criar o arquivo "Program.cs", pois no exemplo NÃO foi criado, mas está acusando erro..
- Gravidade: Erro
- Código: CS0119
- Descrição: "FormatoPORCENTO" é um tipo, que não é válido no contexto fornecido
using caDesignPatternChainOfResponsibility;
using caDesignPatternChainOfResponsibility.Formatos;
Conta conta1 = new("Teste1", 1000);
Conta conta2 = new("Teste2", 2000);
Conta conta3 = new("Teste2", 3000);
FormatoCSV FCSX = new FormatoCSV(FormatoXML);
FormatoXML FXML = new FormatoXML(FormatoPORCENTO);
FormatoPORCENTO FPorCento = new FormatoPORCENTO();
Montei desta forma:
INTERFACE RESPOSTA
interface Resposta
{
public void Responde(Requisicao req, Conta conta);
}
CLASSE REQUISICAO
enum Formato
{
XML,
CSV,
PORCENTO
}
class Requisicao
{
public Formato Formato { get; private set; }
public Requisicao(Formato formato)
{
this.Formato = formato;
}
}
CLASSE CONTA
public class Conta
{
[Required(ErrorMessage = "O saldo é obrigatório.")]
public double Saldo { get; set; }
[Required(ErrorMessage = "O nome do titular é obrigatório.")]
public string? Titular { get; set; }
/// <summary>
/// Construtor da Classe
/// </summary>
/// <param name="titular">Nome do Titular</param>
/// <param name="saldo">Saldo da Conta</param>
public Conta(String titular, double saldo)
{
Titular = titular;
Saldo = saldo;
}
}
CLASSE FORMATOCSV
internal class FormatoCSV : IResposta
{
public IResposta OutraResposta { get; private set; }
public FormatoCSV(IResposta outraResposta)
{
OutraResposta = outraResposta;
}
public void Responde(Requisicao req, Conta conta)
{
if (req.Formato == Formato.CSV)
{
Console.WriteLine(conta.Titular + ";" + conta.Saldo);
}
else
{
OutraResposta.Responde(req, conta);
}
}
}
CLASSE FORMATOXML
internal class FormatoXML : IResposta
{
public IResposta OutraResposta { get; private set; }
public FormatoXML(IResposta outraResposta)
{
OutraResposta = outraResposta;
}
public void Responde(Requisicao req, Conta conta)
{
if (req.Formato == Formato.XML)
{
Console.WriteLine("<conta><titular>" + conta.Titular + "</titular><saldo>" + conta.Saldo + "</saldo></conta>");
}
else
{
OutraResposta.Responde(req, conta);
}
}
}
CLASSE FORMATOPORCENTO
using System.Diagnostics.CodeAnalysis;
namespace caDesignPatternChainOfResponsibility.Formatos;
internal class FormatoPORCENTO : IResposta
{
[AllowNull]
public IResposta OutraResposta { get; private set; }
public FormatoPORCENTO(IResposta outraResposta)
{
OutraResposta = outraResposta;
}
public FormatoPORCENTO()
{
OutraResposta = null; // NÃO tem outra resposta!
}
public void Responde(Requisicao req, Conta conta)
{
if (req.Formato == Formato.PORCENTO)
{
Console.WriteLine(conta.Titular + "%" + conta.Saldo);
}
else if (OutraResposta != null)
{
OutraResposta.Responde(req, conta);
}
else
{
// não existe próxima na corrente, e ninguém atendeu a requisição!
// poderíamos não ter feito nada aqui, caso não fosse necessário!
throw new Exception("Formato de resposta não encontrado");
}
}
}
Agradeço qualquer ajuda.
Fabio I.