AdverServer Servidor de Ranking para AdverGames Parte 3 Felipe Maia AdverServer Servidor de ranking para jogos online – AdverGames Produto comercial Não é vendido como um produto mas faz parte dos jogos AdverServer Permite cadastro e manipulação de administradores, empresas, jogos, jogadores, invite-emails e entradas de ranking Sistema de Informação com banco de dados Realiza comunicação com interface JSP e com um protocolo de mensagem HTTP para comunicação Flash AdverServer Possui controle de persistência, porém sem controle de concorrência nem de transação Razoavelmente modularizado AdverServer - Arquitetura JSP Page Flash Game HttpServlet FabricaHandler Handlers... Handlers... Handlers... Fachada Negocio Concern Identificados Concerns Persistence Concurrency ExceptionHandling ErrorLogging PropertiesReading FlashProxy Business Remodularização Adverserver Processo de remodularização OO Primeiramente o Adverserver foi remodularizado em Java básico OO Bons resultados foram obtidos na remoção dos clones Foram encontrados alguns bugs que foram corrigidos (exemplo: editar não validava os campos fornecidos) Remodularização Adverserver Processo de remodularização OO A marcação do código via concerntagger forneceu um bom conhecimento do sistema O projeto original possuia uma arquitetura decente, utilizando design patterns como AbstractFactory e Singleton Remodularização Adverserver Processo de remodularização OO O projeto original possuia alguns pequenos problemas básicos e simples de design Algumas classes estavam mal nomeadas Algumas classes estavam em pacotes que não deveriam estar Exemplo: Repositorio era na verdade um repositorio especifico SQL Exemplo: Repositorio SQL estava no pacote de negocio Classes básicas acessavam cadastros para se autalizarem na persistencia Remodularização Adverserver Processo de remodularização AO Somente após a modularização OO foi realizada a modularização AO A modularização AO não encontrou muitos locais onde atuar O controle de persistencia foi completamente modularizado via OO e AO O controle de sincronização só evitava a quebra da pattern Singleton Remodularização Adverserver Processo de remodularização AO Não existia controle de transação, as operações eram simples O tratamento de exceção não continha clones reais a serem modularizados O logging de erro só ocorria na geração de uma exceção A comunicação Flash já estava bem modularizada via OO Remodularização Adverserver Processo de remodularização AO A camada de negócio já estava bem modularizada via OO Dados recolhidos Tempo da remodularização 28 horas entre estudo e remodularização Refactorings OO via eclipse: Rename: Move: 13x 4x EncapsulateFields: 5x Dados recolhidos Refactorings OO via eclipse: Extract Method: Padrões: 6x Removidos 4 singletons Adicionado um singleton Utilização de Fabrica na modularização da persistencia Idiomas AO: Tag (marker) interface Refactorings Dados recolhidos Refactorings não existentes no Eclipse: Feitos a mão Exemplo: Encapsulate method As páginas JSP não foram modificadas Foram criadas 3 novas classes java e 1 novo aspecto aj Dados recolhidos Pares de clones encontrados na nova versão: 35 Porém nenhum par parece ser bem modularizável via OO ou AO A maioria é negócio similar ou strings SQL Resultados Problemas na modularização OO foram detectados e foram consertados Inclusive alguns bugs foram detectados e corrigidos Decorreu de todas as três partes do projeto Resultados Somente o crosscutting concearn Persistence foi totalmente modularizado Decorreu da primeira parte do projeto Antes invadia código de cadastros e de classes básicas Agora consiste de repositórios, gerenciador de conexão e aspecto de inicialização Alto ganho em modularização Resultados Tratamento de exceção já estava parcialmente sem duplicação de código Pequenos problemas foram consertados via OO Evitando assim duplicação Conclusão O projeto foi bastante trabalhoso e cansativo AOP é extremamente potente porém extremamente complexa sem as ferramentas corretas OO gera bons resultados quando utilizada em conjunto com uma boa arquitetura e design patterns Porém podem se tornar excelentes via adição de AOP