Annotations ou XML?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
bcartaxo
JavaTeenager

Membro desde: 06/11/2006 00:35:48
Mensagens: 193
Localização: Recife - PE
Offline

Estou iniciando os estudos em Hibernate, o EJB 3.0 trouxe a JPA que define uma API para ORM que usa majoritariamente annotations.
Vejo que o Hibernate 3.x suporta tanto a abordagem antiga de mapeamento por XML quanto de annotations do JPA.
Apesar de saber que utilizando as annotations do JPA estou tornando minha aplicação mais flexível caso queira modificar meu framework ORM para algum diferente do Hibernate (fato bem improvável), porém mapeando meus objetos persistentes no próprio código das classes deixou as classes estremamente poluídas e confusas.
Quando se tem apenas uma, duas ou até três anotações ainda vai, mais quando se tem anotações grandes e em excesso a legibilidade fica péssima, sem falar que eu estou de certa forma pondo código de banco de dados junto com minhas classes de negócio, eu acho essa abordagem um tanto quanto esquisita, e estou fortemente inclinidado ao mapeamento antigo do Hibernate através de XML, porém como estou iniciando nisso tudo gostaria de ouvir a opinião de vcs do GUJ.
O que vocês me dizem com relação as questões levantadas?

Desde ja agradeço.

This message was edited 2 times. Last update was at 16/11/2007 23:25:08

[MSN]
psevestre
JavaEvangelist

Membro desde: 13/05/2005 12:53:19
Mensagens: 432
Localização: São Paulo
Offline

bcartaxo wrote:Estou iniciando os estudos em Hibernate, o EJB 3.0 trouxe a JPA que define uma API para ORM que usa majoritariamente annotations.
Vejo que o Hibernate 3.x suporta tanto a abordagem antiga de mapeamento por XML quanto de annotations do JPA.
Apesar de saber que utilizando as annotations do JPA estou tornando minha aplicação mais flexível caso queira modificar meu framework ORM para algum diferente do Hibernate (fato bem improvável), porém mapeando meus objetos persistentes no próprio código das classes deixou as classes estremamente poluídas e confusas.
Quando se tem apenas uma, duas ou até três anotações ainda vai, mais quando se tem anotações grandes e em excesso a legibilidade fica péssima, sem falar que eu estou de certa forma pondo código de banco de dados junto com minhas classes de negócio, eu acho essa abordagem um tanto quanto esquisita, e estou fortemente inclinidado ao mapeamento antigo do Hibernate através de XML, porém como estou iniciando nisso tudo gostaria de ouvir a opinião de vcs do GUJ.
O que vocês me dizem com relação as questões levantadas?

Desde ja agradeço.



Eu, particularmente, não gosto de annotations em parte pelos motivos que você apresentou. De qualquer forma, o que acho fundamental é que, independente do mecanismo, os artefatos (classes anotadas ou classes + descritores) sejam gerado de forma automática a partir do banco de dados, quando este já existe, ou de um modelo UML ou ER.

Hoje há ferramentas free e propritárias que fazem esta parte, de forma que esta discussão é, de certa forma secundária.

http://justaphilpicks.blogspot.com/
[MSN]
xandroalmeida
JavaChild
[Avatar]

Membro desde: 30/10/2006 16:45:54
Mensagens: 139
Localização: São Paulo
Offline

XML, usado para configurações, fede!
Sem dúvidas use annotations.

Se você mesmo acha bem improvável que ira trocar a framework de ORM, porque se preocupar-se com isso ?
E você pode usar as annotations do JPA, e desta forma poder usar qq ORM compatível com a JPA.

--
Alexandro D. Almeida
http://www.buzugo.com
[WWW]
bosnic
Debugger

Membro desde: 17/11/2007 14:22:32
Mensagens: 63
Offline

Olha só,
a partir do momento em que você decide usar alguma tecnologia de mapeamento objeto relacional (nao quero entrar aqui na discussão se isso é ou não uma boa decisão) você tem que entender que o framework utilizado precisa ter algum recurso para fazer esse mapeamento. Nenhuma das duas tecnologias que voce mencionou é perfeita (afinal, nada neste mundo de programação é perfeito), e por isso você tem que optar pelo 'menos ruim', ou seja, aquilo que vai lhe proporcionar mais produtividade e flexibilidade. Neste caso, sem dúvida, annotations é uma tecnologia melhor. Voce pode, por exemplo, trocar de Toplink para implementação de Hibernate (estou falando de JPA) de uma forma muito fácil, ou até trocar por alguma tecnologia melhor ainda que venha a surgir futuramente. Coisa que seria muito mais dificil de fazer caso voce optasse pelo Hibernate 'antigo' usando XML.
Resumindo, neste dilema em particular, o meu voto certamente vai para annotations (JPA).

Abraço.

Bosnic
[MSN]
LuizAvila
JavaTeenager
[Avatar]

Membro desde: 07/11/2004 22:35:12
Mensagens: 189
Localização: Florianópolis
Offline

bosnic wrote:Olha só,
a partir do momento em que você decide usar alguma tecnologia de mapeamento objeto relacional (nao quero entrar aqui na discussão se isso é ou não uma boa decisão) você tem que entender que o framework utilizado precisa ter algum recurso para fazer esse mapeamento. Nenhuma das duas tecnologias que voce mencionou é perfeita (afinal, nada neste mundo de programação é perfeito), e por isso você tem que optar pelo 'menos ruim', ou seja, aquilo que vai lhe proporcionar mais produtividade e flexibilidade. Neste caso, sem dúvida, annotations é uma tecnologia melhor. Voce pode, por exemplo, trocar de Toplink para implementação de Hibernate (estou falando de JPA) de uma forma muito fácil, ou até trocar por alguma tecnologia melhor ainda que venha a surgir futuramente. Coisa que seria muito mais dificil de fazer caso voce optasse pelo Hibernate 'antigo' usando XML.
Resumindo, neste dilema em particular, o meu voto certamente vai para annotations (JPA).

Abraço.

Pessoal;

Dêem uma melhor estudada na especificação JPA que vcs vao notar que tanto configurações por anotações quanto por XML são aceitas.

Sugestão de bons livros sobre JPA:

1 - Pro EJB 3.0
2 - Enterprise JavaBeans 3.0

Luiz Ávila
GU Java SC
http://www.gujava.org.br
http://www.baixoacoplamento.blog.br
[WWW] [MSN]
ronaldtm
Entusiasta Java

Membro desde: 03/11/2004 19:33:21
Mensagens: 22
Localização: Brasília - DF
Offline

Eu estou usando Hibernate Annotations em algumas aplicações, e deixo aqui algumas coisas que constatei:

1. configurações com anotações realmente é mais prático nos casos simples, mas em casos de herança ou mapeamentos mais complexos, XML é mais fácil de entender.

2. o JPA é bom no geral, mas em vários detalhes, você tem que fazer configurações específicas para obter o resultado desejado. Exemplo: Pelo JPA, @AssociationOverride não funciona com @Embedded (objetos 'embedded' que possuem associações, e não apenas propriedades), mas o Hibernate permite.

3. algumas coisas só funcionam quando você usa o XML específico! Exemplo: lazy-loading de Blobs em um @Embedded, só funcionou quando configurei no HBM, tentei com todas as anotações possíveis e imagináveis e nada (provavelmente é um bug, mas o fato é que não funciona)

4. mapeamento ORM, quando vai além do 'gerado a partir do banco' (isto é, qualquer mapeamento não trivial) não é tão simples quanto parece, e diferenças entre bancos (Oracle, Postgresql, hsqldb, mysql) e entre providers (Hibernate, Toplink, OpenJPA) afetam consideravelmente o mapeamento (diferença no suporte de features como sequences, etc.). Então, essa coisa de 'apenas gere tudo a partir do banco' pode ser uma furada sem volta.

Resumindo, JPA é bom, é bom ter um padrão para funções comuns. Mas quando for fazer um projeto, faça uma escolha de tecnologia (provider) e aprenda-a profundamente, porque com certeza você vai esbarrar com bugs e peculiaridades da implementação, e só vai saber diagnosticar o problema se conhecer bem o que vai por baixo dos panos. Além disso, importantes funções de tunning de performance - como a configuração de cache, por exemplo - são 'proprietários' (específicos). Usar apenas o que é 'padrão' parece bom, mas quando o padrão nao é suficiente, se limitar a ele é simplesmente burrice.

"In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about 'how' to shape things either." (Christopher Alexander)
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team