Orientação a Aspectos: π-PSF Killer Team Amirton Chagas, Elton Renan, José Dihego, Natanael Silva, Thiago Alexandre Cenário Antigo • Aproximadamente 20.000 linhas de código, em 90 classes. Concerns identificados: •Armazenamento de Dados •Remoção de Dados •Atualização de Dados •Inserção de Dados •Verificar Pertinência •Recuperação de dados •Recuperação Elemento ID •Recuperação Lista Elementos •GUI •Serialização •Tratamento de Exceção •Internacionalização •Conceito de Aplicação •Conversão •Regras de Negócio •Geração de Relatórios Código Entrelaçado e Espalhado Vários Clones • Parâmetros escolhidos: – Comprimento mínimo: 60 – Qtd mínima de Tokens: 14 • Clones detectados: 1332 • Muitos clones na camada de Persistência • Alguns clones longos na Interface Gráfica Analisando melhor o projeto • Descobrimos os concerns chave da nossa aplicação analisando os clones: • Controle de Transação • Inicialização de Componentes de Interface Gráfica • Outras descobertas: • Camada de negócio estava intimamente ligada ao Oracle • Serialização e GUI estavam entrelaçadas • Conceitos da aplicação entrelaçados com o BD (ID) • Internacionalização estava espalhada pela GUI O que foi feito [1] • Nem tudo necessitava do uso de aspectos – Inicialização de Componentes da Interface Gráfica Classe auxiliar para inicializar os componentes -> Redução significativa da repetição de código O que foi feito [2] • Se mudarmos o SGBD agora alteramos um único arquivo. O que foi feito [3] • serialVersionUID não faz parte da semântica de nenhum componente da GUI. O que foi feito [4] O Banco de Dados requer chave primária - Id ... ... Nossas classes de conceito de aplicação não ! O que foi feito [5] Os outputs ao usuário se adequam ao idioma escolhido. O que foi feito [6] • Controlar as transações no banco era essencial, código extremamente repetido. • A solução foi modificar o código utilizando orientação a objetos + orientação a aspectos Solução[2] • Orientada a Aspectos Comparativo ANTES DEPOIS Número de Clones caiu • Mesmos parâmetros, muito menos clones. Resultados obtidos[1] Linhas de Código Nº de Clones 1500 15000 1000 1332 11000 7425 10000 500 5000 0 57 Antes Depois 0 Antes Depois Conclusões • Muitos dos problemas do projeto foram solucionados simplesmente com Orientação a Objetos • O restante deles AOP resolveu • Código muito mais legível • Diminuição do número de linhas de código • Redução drástica do número de clones