Sendo assim, desenvolvedores que buscam soluções voltadas para a persistência de dados podem encontrar no Apache Cayenne uma eficiente alternativa de ORM que abstrai qualquer necessidade de lidar com arquivos XML ou anotações durante o trabalho de mapeamento.
A necessidade de persistir dados em tempo de execução é tão antiga quanto a própria computação. De fato, a abordagem de gerenciar dados persistentes tem sido uma peça fundamental de decisão na concepção de todo projeto de software.
Notadamente, a aplicabilidade de um sistema cujos dados manipulados não sejam salvaguardados em algum formato ou estrutura contemplaria um escopo tão reduzido que a própria existência do sistema poderia ser objeto de questionamento.
Na perspectiva da plataforma Java, a persistência normalmente está associada ao armazenamento de dados em bancos de dados relacionais que fazem uso da linguagem SQL. No contexto deaplicações orientadas a objetos, a persistência possibilita que um objeto sobreviva à finalização do processo que o criou, uma vez que seu estado pode ser armazenado em disco, o que viabiliza a sua posterior recriação.
Naturalmente essa operação não é limitada a apenas um único objeto – todo um grafo de objetos pode da mesma forma ser persistido e subsequentemente recriado por meio de um novo processo.
Atualmente, grande parte dos projetos de softwares corporativos fazem uso conjugado do paradigma da orientação a objetos – para o desenvolvimento de aplicações – e da persistência em bancos de dados relacionais – para o armazenamento das informações.
Contudo, as diferenças existentes entre os fundamentos dessas duas abordagens inviabilizam uma perfeita adequação no uso concomitante de ambas. Isto porque enquanto o paradigma da orientação a objetos é baseado em princípios advindos da Engenharia de Software, o paradigma relacional, por outro lado, é baseado em fortes princípios matemáticos.
Logo, para que as duas abordagens possam coexistir em um mesmo projeto de sistema, é preciso preencher essa lacuna semântica (conhecida como Impedance Mismatch) que separa os dois paradigmas.
Uma técnica encontrada para contornar as especificidades que separam o mundo dos objetos do mundo das relações ficou conhecida como mapeamento objeto-relacional (Object-Relational Mapping – ORM). Em poucas palavras, um mapeamento objeto-relacional é um mecanismo de persistência baseado na tradução de objetos de uma aplicação para tabelas de um banco de dados relacional por meio de metadados que descrevem o mapeamento entre os objetos e o banco. Em essência, uma solução de ORM consiste em quatro peças principais:
· Uma API para executar operações básicas de CRUD (Create-Read-Update-Delete) sobre objetos de classes persistentes;
· Uma linguagem ou API para especificar queries que possam referenciar classes e suas respectivas propriedades;
· Uma forma de se construir mapeamentos por meio de metadados;
· Um mecanismo para que a implementação do ORM possa interagir com objetos transacionais a fim de executar a otimização de funções, como checagem de inconsistência de dados ou recuperação lazy de associações.
Alguns dos benefícios que podem ser derivados do uso de um mecanismo de ORM são:
· Produtividade: Boa parte do código relacionado com a camada de persistência de uma aplicação é substituída pelas funcionalidades da solução de ORM. Logo, desenvolvedores podem focar ainda mais nos problemas referentes ao negócio para o qual a aplicação está sendo construída;
· Manutenibilidade: Uma menor quantidade de linhas de código torna um sistema mais simples de se compreender, uma vez que o código existente está focado na lógica de negócio. Ainda mais importante é o fato de que sistemas com menos linhas de código são mais fáceis de serem refatorados.
Assim, dado que a persistência automatizada por uma solução de ORM reduz a quantidade de linhas de código de um sistema, então dela pode-se obter os ganhos citados anteriormente;
· Desempenho: Aclama-se que um código de persistência escrito diretamente pelo desenvolvedor da aplicação tem um desempenho pelo menos igual e, com frequência pode ter um desempenho superior, quando comparado ao código gerado e executado por um mecanismo de automatização de persistência.
Contudo, quando uma tarefa de persistência é analisada, sabe-se que diversas otimizações são passíveis de serem efetuadas. Algumas delas talvez sejam mais simples de implementar por meio de códigos construídos pelos próprios programadores. ...
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais