quarta-feira, 3 de agosto de 2016

Tagged under:

JPA de A à Z - Vantagens e Desvantagens

No post anterior tentei instigar você a conhecer a JPA e a entender o motivo dessa especificação ser tão utilizada atualmente. No post de hoje vamos analisar as vantagens e desvantagens dessa especificação, a ideia é que com o pouco da minha experiência passemos a entender que toda solução pode se torna um fardo se utilizada incorretamente. Sinta-se convidado a compartilhar suas experiências nos comentários.

  • VANTAGENS:
  1. Indepêndencia: Utilizando JPQL ou Criteria conseguimos ter uma indepêndencia com os bancos de dados porque agora fica a cargo da implementação da JPA em converter sua consulta em SQL nativo. Agora as ações básicas de insert, update e delete também ficam por conta da implementação. Com isso podemos criar uma única aplicação que vai se comunicar com diversos bancos de dados.
  2. Reduz a necessidade de conhecer SQL: Não me leve a mal, ainda penso que conhecer pelo menos o básico de SQL é fundamental para qualquer programador. Todavia você consegue trabalhar com a JPA sem esse conhecimento.
  3. Dê adeus a conversão de querys em objetos: No post anterior você teve um gostinho do trabalho que braçal necessário para se obter um objeto com o JDBC. Justamente para não perdemos mais tempo com isso nasceram as implementações da JPA que são capazes de realizar esse trabalho para gente.
  4. Otimização automática: Nem sempre temos o trabalho de otimizar uma consulta, mas esse é um ponto que considero critico porque muda de implementação para implementação e nem sempre temos o resultado desejado. Caso você precise ter um sistema em que as consultas sejam sempre otimizadas recomendo que utilize o Batoo no lugar do Hibernate por exemplo.
  5. Cache de dados: Cache de dados é muito util para diminuir a quantidade de requisição ao banco de dados, o chace de dados também faz com que o desempenho da sua aplicação melhore caso você tenha cuidado com o custo de RAM necessário.

Não me leve a mal a JPA é uma ferramenta muito poderosa e muitas vezes pensamos que ela é a solução para tudo, também não é incomum querer resolver todos os problemas do mundo com ela. Não vejo nada de errado nisso, desde que sempre se preocupe com os pontos abaixo:

  • DESVANTAGENS:
  1. Base de dados legada: Nem sempre foi possível executar triggers, functions e procedures direto no banco de dados. Atualmente podemos fazer isso, todavia temos que ter cuidado com o impacto que isso pode gerar ao modelo objeto-relacional e a indepêndencia a respeito dos bancos de dados. Hoje em dia por exemplo passo boa parte da minha atividade migrando e otimizando procedures no Java justamente por isso.
  2. Chaves compostas: AH! Que raiva tenho de utilizar @embedded, trabalhar com chaves compostas na JPA significa aumentar drasticamente a complexidade de nossas entidades. Em determinadas situações para executar um update ou insert por exemplo precisamos gerar muito mais código.
  3. Curva de aprendizado para além do básico: Fazer o feijão com arroz utilizando JPA é fácil e muito pratico, isso é bom porque atrai sempre novas pessoas. Mas quando passamos para um nível mais avançado como por exemplo utilizar chaves compostas, chace, criteria e relacionamentos bidirecionais as pessoas começam a encontrar diversas dificuldades. Esse aqui é justamente um dos motivos de existir a serie JPA de A à Z aqui no blog.
  4. Indepêndencia facilmente quebrada: Quebrar a indepência de banco não é difícil. Alguma vezes não tem jeito e precisamos apelar para o SQL nativo seja porque a otimização com a especificação não ficou suficientemente boa ou ate mesmo quando precisamos fazer uma união de consultas.
  5. Unir consultas: Esse pra mim é o defeito mais grave na especificação, simplesmente não conseguimos realizar união de consultas. Claro que podemos utilizar alguns artifícios para simular uma união, mas na grande maioria das vezes é necessários optar pelo SQL nativo e ai vai embora a independência de banco de dados.

Enfim, hoje quis apresentar a vocês o meu ponto de vista sobre a JPA de uma forma mais detalhada por meio das minhas experiências com a especificação. Claro que a JPA não deixa de ser uma arma poderosa mesmo tendo essas desvantagens, por isso fica aqui o meu apelo para que ocorra um planejamento ao utilizar a JPA.

0 comentários: