Thiagosc:
Cheguei a conclusão de que o “sucesso” de ferramentas como o Hibernate se deve exclusivamente a incapacidade dos desenvolvedores de aprender modelagem de dados e SQL. O “sucesso” aí é relativo, me refiro a noção de que isso é necessário, não a quantidade de projetos mundo afora, pois, para dizer a verdade, não tenho visto muitos.
O sucesso de ferramentas como o hibernate está no fato delas proverem uma abstração OO para a persistência/recuperação de Objetos. Ou seja, ele usa objetos para persistir/recuperar objetos.
A beleza de usar uma linguagem OO como Java é que não é necessário saber essas coisas. Vc tem que entender que para quem usa OO o banco é apenas um sistema de arquivamento complexo e util para persistir e encontrar informação. Não é um ambiente de programação (logo, procedure e function são inuteis* ) , não é um sistema de validação de regras (logo trigger , chave estrangeira, referencia etc, são inuteis*) e não é um mecanismo formal. i.e. o objetivo é simplificar o mapeamento dos objetos para o banco e não do banco para os objetos; logo as formas normais são usada até onde forem uteis e join é uma coisa inútil*.
- Inutil do ponto de vista da aplicação. Do ponto de vista estrutural de quem faz um framework de persistência, podem ser ferramentas importantes. O join pode ser usado, mas procudures e functions criam um vendor-lockin que é um problema muito grave do ponto de vista de quem escolher Java. Chave estrangeire/ referencias é bom até que começa a impedir o framework de persistencia de fazer as coisas da forma mais simples. Porque eu preciso integridade referencial explicita se o framework OO me garante essa integridade de forma implicita ? Pois é, não preciso.
Claro que posso usar , e às vezes é necessário usar os mecanismo do banco, mas 99%das vezes não é isso que desejamos fazer.
Esta é fácil. Porque o XML me garante que não vou ficar preso ao dialeto de determinado banco. Além de que o XML pode ser construido por ferramentas que se alimentam de outros dados, como diagrama ER.
Como adicionar ao seu projeto dependência de um banco de dados especifico é mais fácil do que pegar um bean com um objeto que abstrai o SQL e seus dialetos de forma automática?
Como fazer refactoring de objetos é mais dificil que fazer manipulação de strings SQL ?
SQL - Structured Query Language - é uma linguagem independente da tecnologia de banco. Tanto é que ela foi adaptada para objetos (HQL, EQL ,etc)
O que faz com que vc ache que SQL é só para banco de dados são os malditos dialetos criados pelos vendedores de RMDS. Ok, HQL tb é um dialecto maltido, mas o ponto é que SQL é independente e se adapta à tecnologia subjacente. Moral da historia, é possivel continuar usando SQL
de forma OO sem nunca saber que existe um banco de dados rodando.
E esta é que é a vantagem de OO: Encapsulamento.