0
respostas

Implementei diferentemente

Olá. Quando implementei o exercício Relatórios e Template Method, implementei de uma forma completamente diferente apresentado pelo instrutor, mas utilizando o Padrão Template Method. O que acham?

namespace Relatorio
{
    public class Conta
    {
        public Conta()
        {
            this.Itens = new List<Conta>();
        }
        public Conta(string agencia, string numeroConta, string titular, double saldo)
        {
            Agencia = agencia;
            NumeroConta = numeroConta;
            Titular = titular;
            Saldo = saldo;
            this.Itens = new List<Conta>();
        }        
        public string Agencia { get; set; }
        public string NumeroConta { get; set; }
        public string Titular { get; set; }
        public double Saldo { get; set; }        
        public IList<Conta> Itens { get; private set; }
        public void AdicionarConta(Conta item)
        {
            this.Itens.Add(item);
        }
    }
}

namespace Relatorio
{
    public enum TipoRelatorio
    {
        Simples = 0,
        Complexo
    }    
    interface Impressao
    {
        void Imprimir(Conta conta, TipoRelatorio tipoRelatorio);
    }
}

namespace Relatorio
{
    public class Relatorio : TemplateDeRelatorio
    {
        protected override void ImprimirRelatorioSimples(Conta conta)
        {

            Console.WriteLine("Banco do Povo | Relatório Simples");
            Console.WriteLine("===============");
            Console.WriteLine("Titular\t\tSaldo");
            Console.WriteLine("--------------------------");
            foreach (Conta item in conta.Itens)
            {
                Console.WriteLine($"{ item.Titular}\t{item.Saldo}");
            }
            Console.WriteLine("");
            Console.WriteLine($"Quantiade: {conta.Itens.Count}");
            Console.WriteLine("===============");
            Console.WriteLine("Telefone: (99) 99999-9999");
        }
        protected override void ImprimieRelatorioComplexo(Conta conta)
        {            
            Console.WriteLine("Banco do Povo - Relatório Complexo");
            Console.WriteLine("Rua Sem Saída, s/n, Centro, Cidade do Estado");
            Console.WriteLine("Telefone: (99) 99999-9999");
            Console.WriteLine("===============");
            Console.WriteLine("Agência\tConta\tTitular\t\tSaldo");
            Console.WriteLine("---------------------------");
            foreach (Conta item in conta.Itens)
            {
                Console.WriteLine($"{item.Agencia}\t{item.NumeroConta}\t{ item.Titular}\t{item.Saldo}");
            }
            Console.WriteLine("");
            Console.WriteLine($"Quantiade: {conta.Itens.Count}");
            Console.WriteLine("===============");
            Console.WriteLine("E-mail: sacdobanco@bancodopovo.com.br");
            Console.WriteLine(DateTime.Now);
        }
        protected override bool ImprimirQualRelatorio(Conta conta, TipoRelatorio tipoRelatorio)
        {
            return tipoRelatorio == TipoRelatorio.Simples;
        }
    }
}

namespace Relatorio
{
    public abstract class TemplateDeRelatorio : Impressao
    {
        public void Imprimir(Conta conta, TipoRelatorio tipoRelatorio)
        {
            if (ImprimirQualRelatorio(conta, tipoRelatorio))
            {
                ImprimirRelatorioSimples(conta);
            }
            else
            {
                ImprimieRelatorioComplexo(conta);
            }
        }
        protected abstract void ImprimirRelatorioSimples(Conta conta);
        protected abstract void ImprimieRelatorioComplexo(Conta conta);
        protected abstract bool ImprimirQualRelatorio(Conta conta, TipoRelatorio tipoRelatorio);
    }
}

namespace Relatorio
{
    class Program
    {
        static void Main(string[] args)
        {
            Relatorio relatorio = new Relatorio();            
            Conta conta = new Conta();
            conta.AdicionarConta(new Conta("1234", "45622-2", "Iara Frois",799.92));
            conta.AdicionarConta(new Conta("1234", "13466-6", "Óscar Frias",100.01));
            conta.AdicionarConta(new Conta("1242", "12782-7", "Josefina Mexia",223.11));
            conta.AdicionarConta(new Conta("1234", "13467-7", "Joel Fogaça",419.54));
            conta.AdicionarConta(new Conta("1255", "13465-9", "Inês Rebouças", 532.99));
            conta.AdicionarConta(new Conta("1255", "34212-5", "Timur Ribas",432.22));
            conta.AdicionarConta(new Conta("1242", "35632-3", "Oziel Bessa", 312.22));
            conta.AdicionarConta(new Conta("1256", "75643-2", "Iara Assunção",122.14));

            relatorio.Imprimir(conta, TipoRelatorio.Simples);
            Console.WriteLine("");
            relatorio.Imprimir(conta, TipoRelatorio.Complexo);
            Console.ReadKey();
        }
    }
}