XML VS Annotations VS Convenção

É, essa é uma briga dura. No inicio do desenvolvimento de aplicações java a tecnologia de configuração de recursos e meta-dados era com certeza o XML. E com certeza hoje acredito ainda ser, mas existe uma tecnologia ganhando cada vez mais força as Annotations introduzidas no java 5.0 e para complementar esse trio temos as convenções mais velhas que a minha avó mas cada vez crescendo mais. Este conceito de convenções está ganhando muita visibilidade com o RoR que está cada vez mais influenciando o mundo java. As configurações em arquivos XML seriam uma evoluções de configurações em arquivos texto(seqüências) como pro exemplo os .ini do windows e da microsoft. Com a entrada das Annotations se iniciou um guerra literalmente e as coisas ficarm divididas entre XML e Annotations você verá que nesse contexto temos gregos e troianos. As vantagens do XML seriam:

  • Possibilidade de validação através de DTD ou XSD.
  • Flexibilidade
  • Independência de plataforma
  • Definição de formato e modularização
Porem o XML tem diversos problemas também:
  • Impossibilidade de refactorings usando ferramentas como eclipse
  • Tempo de parser e consumo de memória
  • Potencialidade de erros
As Annotations suprem alguns problemas que temos com XML, provendo:
  • Checagem em tempo de compilação
  • Facilidade para refactorings automáticos com ferramentas como o eclipse
  • Solução elegante para configurações de meta-dados
  • Facilidade de leitura através da própria API nativa do java.
  • Menor custo de leitura do que o XML.
Porem temos alguns problemas em usar Annotations, seriam eles:



  • É possível apenas configurar meta-dados e configurações de baixa granularidade.
  • Perdemos parte da portabilidade.
  • Para mudanças somos obrigados a parar a execução do server, pois as configurações estão no código.
  • Possível acumulação de Annotations no mesmo lugar, perdendo modularização e clareza.
Para finalizar temos as convenções, que acredito ter os seguintes 'goals'
  • Ganho de tempo
  • Ganho de performance
  • Mais produtividade e conseqüentemente menos erros de configurações
  • Baixa da curva de aprendizado de tecnologias
Claro que temos contra nas convenções também, seriam elas:
  • Necessidade de excelente documentação do funcionamento
  • Possível perda de portabilidade
  • Dificuldade de fazer mudanças bruscas
Após apresentar para vocês esse quadro comparativo, que na minha visão seria assim. Acredito que em um sistema corporativo java EE devemos ter as três tecnologias. Cada uma tem suas vantagens e desvantagens, porem cabe a nos fazer esse discernimento e perceber que uma coisa não anula a outra. Então acredito que o melhor uso para cada tecnologia seria nesse contexto:

XML: Em casos de configurações globais que afetam toda a aplicação ou em casos de configurações globais de recursos como banco de dados,caminhos temporários, recursos, etc... resumindo em artefatos de alta granularidade. EX: Configurações de transações(Spring por exemplo)

Annotations: Em casos de configurações bem especificas para um classe bem especifico, como por exemplo configurações de mapeamento OR e configurações de baixa granularidade.EX: ORM do hibernate.

Convenções: Em casos de configurações repetidas e sem muita variação como por exemplo mapeamento de paginas WEB, ou em casos de baixa granularidade repetida. Ex mapeamentos Action do Stripes.

Então podemos perfeitamente usar as três tecnologias com harmonia. Sempre é bom utilizar as comparações mostradas por mim neste post para decidir qual tecnologia cabe melhor a cada momento, boa escolha!

Abraços.


Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java