20
Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Embed Size (px)

Citation preview

Page 1: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Desenvolvimento de Frameworks e Componentes

Baseados em Metadados

Eduardo Guerra

Page 2: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Apresentação do Palestrante

Eduardo [email protected]

• Formado em Engenharia de Computação pelo ITA em 2002.

• Mestre pelo ITA, no curso de Engenharia Eletrônica e Computação, na área de Informática em 2005.

• Faz o curso de Doutorado no ITA com previsão de término para 2010.

• Professor da Graduação do ITA e da pós-graduação ITA-Stefanini.

• Possui as certificações da Sun: SCJA, SCJP, SCWCD, SCBCD (1.3 e 5.0), SCJWSD, SCMAD e SCEA.

• Possui experiência como Arquiteto de Software nas plataformas Java SE, Java EE e Java ME.

• Editor-chefe e autor de vários artigos da revista MundoJava.

• Administrador dos projeto open-source SwingBean e Esfinge.

Page 3: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Objetivo

Apresentar os principais conceitos relacionados com o desenvolvimento

de frameworks e componentes baseados em metadados, mostrando o que já existe e o que ainda precisa ser

desenvolvido nesta área.

Page 4: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

• Um Ambiente de Negócio Dinâmico

• Utilizando Metadados

• Casos de Sucesso de Uso de Metadados

• Formas de Armazenar Metadados

• Componente Baseado em Metadados

• Geração de Código Baseada em Metadados

• Estudos de Caso: SwingBean e Esfinge

• O que ainda falta ser estudado?

• Considerações Finais

Agenda da Apresentação

Page 5: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Ambiente de Negócio Dinâmico

As regras de negócio das aplicações mudam cada vez mais depressa, o que implica nas aplicações precisarem ser desenvolvidas

rapidamente e de forma flexível.

Flexibilidade Produtividade

Componentesextremamente flexíveis podem

atrasar o desenvolvimento desnecessáriamente gerando

perda na produtividade.

Para obter produtividade podem ser construídos componentes

muito amarrados gerando um alto custo para qualquer modificação.

Page 6: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Produtividade e Flexibilidade

• Padrões de Projeto: estruturas consagradas para solução de problemas recorrentes no desenvolvimento de software.

• Refatoração: reestruturação do código de forma a aumentar sua clareza sem alterar seu comportamento.

• Desenvolvimento Orientado a Testes: criação de testes de unidade antes do código de produção, visando um código objetivo e seguro.

• Programação Orientada a Aspectos: separação de interesses em componentes, visando uma melhor divisão do código.

• Ferramentas IDE: ferramentas que facilitam o desenvolvimento, tornando-o mais visual e automatizando tarefas.

• Geração de Código: ferramentas que geram parte do código da aplicação a partir de algum input.

• MDA: uma abordagem de desenvolvimento onde o código da aplicação é gerado por modelos, normalmente em UML.

• Componentes Baseados em Metadados: utilização de componentes e frameworks nos quais o comportamento é configurado por metadados.

Page 7: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Uso de Metadados

Os metadados podem ser da aplicação (onde eles configuram características dos componentes na

aplicação) ou de objetos (onde eles configuram as características de cada objeto em uma aplicação).

MetadadosComponente Baseado

em Metadados

Classes da Aplicação

Descreve o comportamento que componente deve ter

para cada classe

Utiliza os metadados inerentes a classe

(métodos, atributos e etc...)

Se baseia nos metadados para a

adequação do comportamento.

Page 8: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Exemplo: Comparador

Em uma aplicação onde vários objetos precisam ser comparados, seguindo a abordagem tradicional, seria

necessária a criação de vários comparadores, um para cada objeto devido ao algoritmo de comparação ser diferente.

Pouco produtivo, pois o código de comparação é muito braçal e uma

mudança generalizada demanda uma alteração

em muitas classes.

Page 9: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Exemplo: Comparador

Utilizando metadados existe um descritor com os metadados de comparação de cada classe e um único componente realiza

a comparação de quelaquer classe a partir do descritor.

Com o uso de metadados somente as excessões

precisam ser configuradas, o que torna o desenvolvimento produtivo e o comportamento

fácil de ser alterado.

Page 10: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Vantagens na Utilização de Metadados

• É possível personalizar o comportamento de um componente ou framework de acordo com as necessidades da aplicação.

• Aumento de reuso do componente que utilizar os metadados, devido a possibilidade de ser configurado.

• Diminuição de código repetitivo e braçal, o que diminui a possibilidade de defeitos muitas vezes difícies de serem encontrados.

• Aumento da produtividade da equipe, pois a programação declarativa por metadados é muito menos trabalhosa do que criar a mesma lógica de forma imperativa para várias classes.

• Aumenta a flexibilidade da aplicação devido ao caráter configurável do componente.

• Dependendo da forma que os metadados forem armazenados, eles podem ser alterados sem a necessidade de recompilar o código fonte.

Page 11: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Frameworks Baseados em Metadados

• Hibernate: uso de metadados para mapear o paradigma orientado a objetos para o paradigma relacional, provendo um componente genérico para o acesso a dados.

• Spring: um framework baseado em metadados para o gerenciamento da injeção de dependência e inversão de controle em uma aplicação.

• EJB 3: Uso de metadados para gerenciamento do ciclo de vida, controle de transações, segurança, injeção de dependência e outras coisas...

• JAXB: Uso de metadados para o mapeamento entre documentos XML e uma estrutura de classes.

• Hibernate Validator: Uso de anotações para a validação de objetos de uma classe segundo o negócio da aplicação

• Genesis: Uso de metadados para ligar os métodos de uma classe em ações de componentes gráficos.

Page 12: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Armazenamento de Metadados

• Metadados Implícitos: são utilizadas interfaces de marcação e padrões de nomenclatura para agregar metadados às classes.

• Definição Programática: um código cria um descritor de metadados inserindo programaticamente as informações no mesmo.

• Arquivos Externos: a aplicação lê um arquivo externo, normalmente em XML, e cria os metadados.

• Anotações: são utilizadas anotações nas próprias classes para a definição dos metadados.

• Banco de Dados: os metadados são armazenados em bancos de dados que possibilitam um acesso transacional aos mesmos.

As diferentes formas de armazenamento devem ser utilizadas de acordo com a

adequabilidade das mesmas a aplicação

Page 13: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Componentes Baseados em Metadados

Esta é uma estrutura padrão de um componente ou framework

baseado em metadados

O componente genérico é quem possui a lógica

de adaptação do algoritmo segundo os metadados de cada

objeto, resultando em um maior reuso.

Page 14: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Criação dos Metadados

Criando um descritor de metadados e uma interface para a fábrica, é possível criar uma estrutura onde seja possível utilizar diversas formas diferentes de

criação dos metadados.

Page 15: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Geração de Código

DesvantagemVantagem

Os metadados muitas vezes são utilizados para gerar código, ao invés de configurar

dinâmicamente o comportamento.

Caso seja necessária uma alteração existirão duas opções: gerar o código novamente e perder as

alterações realizadas ou editar o código manualmente

perdendo produtividade.

O gerador de código não precisa suportar todas as

possibilidades, bastando que o desenvolvedor faça as

alterações necessárias no código gerado.

** Existem alguns geradores mais espertos que disponibilizam um espaço para a edição manual do código que é

mantida entre as gerações

Page 16: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Estudo de Caso: SwingBean

• O SwingBean utiliza metadados em arquivos XML para gerar tabelas e formulários em Swing para representar objetos de uma determinada classe.

• Os metadados também são utilizados para fazer a recuperação e inserção dos objetos nos componentes gráficos.

• O framework também faz a validação de objetos e coloca restrições nos componentes de acordo com os metadados.

• O framework utiliza diversos metadados inerentes a própria classe, como tipo e nome dos atributos, para a definição dos componentes.

• O SwingBean se encontra bem maduro: já foi utilizado em sistemas em produção e sua última versão ultrapassou 1400 downloads.

http://swingbean.sf.net

Page 17: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Estudo de Caso: Esfinge

• O Esfinge provê uma estrutura genérica para camada de negócios e interface de persistência de um sistema, que pode ser configurada como desejado utilizando anotações.

• Existem DAOs genéricos utilizando Hibernate e iBatis (futuro: prevayler e JPA), mas o DAO de uma classe pode ser alterado utilizando uma anotação.

• As regras de negócio são implementadas através de comandos genéricos, que também podem ser alterados a partir de anotações.

• Existem camadas que implementam de forma transparente remoting, segurança, notificação de alterações, controle de workflow e logging (futuro: cache, validação e tratador de exceções) , deixando a arquitetura flexível e configurável.

• Já foi utilizado em projetos em produção e teve seu código aberto a pouco tempo. Ainda está com documentação deficiente e ainda não foi “formalmente” apresentado a comunidade.

http://esfinge.sf.net

Page 18: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

O que ainda falta ser estudado?

• Criação de uma técnica para identificar funcionalidades onde o uso de metadados seria adequado e para modelar e/ou refatorar o componente e os metadados que seriam utilizados.

• Identificação de padrões de projeto, baseado nos frameworks já existentes, para a solução de problemas recorrentes com a utilização de metadados.

• Estudar mais a fundo a aplicabilidade e adequabilidade das diferentes formas de armazenamento de metadados em diferentes cenários.

• Estudar a criação de aspectos baseados em metadados e sua aplicabilidade em diversos contextos.

Como não existe ainda muita pesquisa em cima de modelagem com a utilização de metadados, existem

várias linhas de pesquisa a serem exploradas.

Page 19: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Considerações Finais

• Os frameworks e APIs baseados em metadados são a chave da produtividade em diversos sistemas atuais e a tendência é que sejam cada vez mais adotados.

• Apesar da experiência mostrar que eles funcionam bem na prática, existe muito pouco estudo a respeito de como eles devem ser modelados e estruturados.

• O desenvolvimento de técnicas e a identificação de padrões de projeto que facilitem o desenvolvimento de componentes e frameworks baseados em metadados, certamente será de grande ajuda para os desenvolvedores que utilizarão esta técnica no futuro.

Page 20: Desenvolvimento de Frameworks e Componentes Baseados em Metadados Eduardo Guerra

Frase Final

Um framework não é bom pelo que ele faz, mas

quando pode ser utilizado para aquilo que ele não faz.