none
Melhores praticas classe RRS feed

  • Pergunta

  • Ola pessoal,  gostaria de uma ajuda do pessoa mais experiente, seguinte

     

    Tenho um classe Grupo e outra Cliente, o grupo tem quase as mesmas informacoes que o cliente portanto um grupo tem uma colecao de clientes, logo um cliente pertence a um grupo.

     

    Aqui na empresa geramos muitos documentos word com aspose, esses documentos contem muitos dados do cliente e do grupo, posso gerar um documento com umas 6 paginas so com dados financeiros do cliente, e posso gerar um grupo como todos clientes na qual pertence, e outras coisas particulares do grupo.

    O caso e que, quando eu gero um cliente ele tem nome, endereco, cnpj etc.. um grupo tem a mesma coisa, ou seja, so muda o repositorio , portanto sempre que eu gero um grupo eu faco isso

    Grupo gp = GetByGrupo(idGrupo);

    List<Clientes> clientes = GetByGrupo(gp.id);

    aqui comeco um monte de for, ou foreach, faco um for pra pegar dados financeiros, sendo que esses dados financeiros sao gerados basedados em regras, e a partir de outras 7 tabelas, muitas vezes pra recuperar por exemplo o totalGeralCliente, eu faco um for aqui em 7 tabelas faco calculos e retorna so um decimal, isso em um metodo , imagina gerar um documento com 6 paginas no word, com dados financeiros do cliente , por ano, total em 3 meses, tabelas de total,  sempre repito muito codigo, como eu faco pra evitar esses foreach e tudo mais ?  gostaria de melhores praticas, por exemplo sei que poderia ter classes que cada uma calcula sua regra, no entanto eu teria que fazer um for , o problema e a repeticao, sempre tenho que repetir,   

    uma outra questao, quando e pra gerar dados de um cliente ate e mais tranquilo, mais pra gerar dados de clientes de um grupo eu efetuo os mesmos calculos em cima de um foreach , e depois pego o total, gostaria de evitar isso, sempre duplica tudo.

    Resumindo eu tenho as mesmas informacoes a diferenca e que ou e cliente ou e grupo, se for cliente eu pego um cliente, se for grupo eu pego total dos clientes do grupo, alguem pode me dar sugestoes ??

     

    grato

    segunda-feira, 24 de outubro de 2011 17:20

Respostas

  • Boa tarde Lourival.

    Na classe base crie as implementaçoes de cada metodo que sao genericas a grupo e cliente na classe base e depois em cada classe herdada voce so implementa as especializaçoes, no caso , as diferenças entre elas.

        public class ClasseBase
        {
            public virtual void MetodoXPTO()
            {
                MessageBox.Show("MetodoPai");
            }
        }

        public class Cliente : ClasseBase
        {
            public void MetodoXPTO()
            {
                base.MetodoXPTO();
                
                MessageBox.Show("Metodo Filho");
            }
        }

    Chamada:

    Cliente cliente = new Cliente();

    cliente.metodoXPTO();


    Rafael de Camillis Tairum
    MCPD Enterprise Application Developer 3.5 , Comptia+ TTT
    Blog: http://dicamillis.wordpress.com
    sábado, 29 de outubro de 2011 21:53

Todas as Respostas

  • Lourival, voce pode fazer uma classe base que tenha todos os campos em comum e extender dessa classe o grupo. E quando carregar cliente ou grupo fazer uma lista<>.
    Se a minha resposta lhe foi util, marque "Propor como Proposta" para qualificar o conteudo do fórum. Obrigado, Vinicius Nunes Macedo
    segunda-feira, 24 de outubro de 2011 19:20
  • Obrigado kra,  sim eu ja pensei nisso, na verdade poderia ser a classe base como vc disse abstrata ou uma interface,

    no entanto qdo eu herdasse, teria que repetir tudo em cliente e depois em grupo, imagina isso

     

    IMinhaInterface

    string retornaTotalBruto();

    string retornaSeilaOque();

    classe Cliente: IMinhaInterface

    classe Grupo: IMinhaInterface

    Tenho uns 30 metodos, e tenho que retornar pois sao valores q depois substituo pra gerar um arquivo word, eu estaria repetindo codigo nao ?

    segunda-feira, 24 de outubro de 2011 21:15
  • Boa tarde Lourival.

    Na classe base crie as implementaçoes de cada metodo que sao genericas a grupo e cliente na classe base e depois em cada classe herdada voce so implementa as especializaçoes, no caso , as diferenças entre elas.

        public class ClasseBase
        {
            public virtual void MetodoXPTO()
            {
                MessageBox.Show("MetodoPai");
            }
        }

        public class Cliente : ClasseBase
        {
            public void MetodoXPTO()
            {
                base.MetodoXPTO();
                
                MessageBox.Show("Metodo Filho");
            }
        }

    Chamada:

    Cliente cliente = new Cliente();

    cliente.metodoXPTO();


    Rafael de Camillis Tairum
    MCPD Enterprise Application Developer 3.5 , Comptia+ TTT
    Blog: http://dicamillis.wordpress.com
    sábado, 29 de outubro de 2011 21:53