none
Dúvida de remodelagem em legado RRS feed

  • Pergunta

  • Pessoal,

    Estou reformulando toda a parte de relatórios de uma aplicação para atender um requisito de um cliente. Não quero ter retrabalho no futuro então vou remodelar praticamente tudo e gostaria da opnião de vocês.

    Cenário atual :
    Os relatórios são criados/cadastrados em uma tela do sistema. Informo código, nome, tipo e tenho um novo relatório.
    Para cada tipo de relatório, a construção do layout é diferente. Temos relatórios normais (como esses que vemos em vários sistemas), relatório de tabela dinâmica (semelhante ao do excel), gráficos, listagens e KPIs (medidores). De acordo com o tipo, chamamos a tela de design e visualização correspondente.

    Na tela de cadastro, são feitas todas as rotinas para inserir, excluir, editar, exibir os relatórios. Também configuramos filtros para serem aplicados no momento da exibição. O sistema está muito acoplado, tem acesso a dados na interface, regras de negócio na interface, em classes separadas.

    Cenário Requerido :
    Nem sempre esses relatórios ficarão no banco de dados. Vou poder armazená-los no banco, no disco e como resource em um componente Windows Forms ou Web.

     


    De cara, vou ter que reformular isso para deixar mais OO e menos procedural. Vou separar os algoritmos de criação e exibição dos relatórios em classes específicas. Estou caindo em algo semelhante ao padrão Strategy, mas não sei se posso assim dizer.

    Criei uma Interface IReport com as ações Design e Show e uma classe abstrata Report que implementa essa interface, com as propriedades comuns a todos os tipos de relatórios (nome, código, etc.).
    Criei também uma classe específica para cada tipo de relatório que herda da Report abstrata e que deve implementar da sua maneira os métodos Design e Show, para exibir as telas correspondentes.

    Tem mais um pequeno detalhe, o método Show tem que exibir o relatório numa interface web ou desktop, dependendo do sistema.

    Para o acesso a dados, pretendo utilizar um repositório para o banco, outro para o disco e assim em diante. Mas isso é outro detalhe...


    No momento minha dúvida é no modelo:
    Seria correto eliminar a interface e deixar os métodos Design e Show como abstratos na Report abstrata, ou manter a interface?
    Para a exibição, hora na web, hora no desktop, teria que ter classes concretas diferentes para desktop e para web?

    Espero ter sido claro e conto com a opinião de vocês!

    Atenciosamente,

    Diogo Damiani Ferreira
    quinta-feira, 20 de maio de 2010 22:44

Respostas