Usuário com melhor resposta
Melhores praticas classe

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
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- Editado Rafael de Camillis Tairum sábado, 29 de outubro de 2011 21:54
- Sugerido como Resposta Rafael de Camillis Tairum sábado, 29 de outubro de 2011 21:54
- Marcado como Resposta Eder CostaModerator quarta-feira, 9 de novembro de 2011 17:00
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- Sugerido como Resposta Rafael de Camillis Tairum sábado, 29 de outubro de 2011 21:54
-
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 ?
-
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- Editado Rafael de Camillis Tairum sábado, 29 de outubro de 2011 21:54
- Sugerido como Resposta Rafael de Camillis Tairum sábado, 29 de outubro de 2011 21:54
- Marcado como Resposta Eder CostaModerator quarta-feira, 9 de novembro de 2011 17:00