ORM: entenda o que é e saiba como usar no desenvolvimento

0
Share

Entenda o que é ORM e veja como usar para agilizar o desenvolvimento de softwares e aplicativos em diferentes linguagens. Confira!

Introdução

Para quem está começando no universo da programação, termos como ORM (Object Relational Mapper) ou mapeamento objeto-relacional podem parecer intimidantes. 

Entretanto, essas técnicas ajudam a simplificar o desafiador trabalho dos desenvolvedores de escrever códigos.

Em resumo, é uma técnica utilizada para fazer o mapeamento entre sistemas orientados a objetos e bancos de dados relacionais. Onde as tabelas do banco de dados são representadas em classes e os registros das tabelas seriam instâncias dessas classes.

Por exemplo, ao utilizar o mapeamento objeto-relacional, o desenvolvedor não precisa se preocupar em escrever as query’s para consultas, inserções, etc.

Essas ações podem ser realizadas através da linguagem de programação, como PHP, C++, Java, Python, Ruby, pois o ORM oferece uma API para lidar com estas operações.

Considerando que as linguagens atuais possuem recursos da POO (Programação Orientada a Objetos), a maioria dos SGBD (Sistemas de Gerenciamento de Bases de Dados) é baseada no modelo relacional, onde existem tabelas, ao invés de objetos.

Por essas razões, a prática de mapear objetos relacionais tem grande importância na área de desenvolvimento.

Para isso, existem ótimas estruturas de mapeamento objeto-relacional, embora alguns desenvolvedores optam por construir seus próprios ORM´s.

Se interessou em saber mais sobre mapeamento objeto-relacional e como usar na programação?

Então, continue a leitura desse artigo e conheça em detalhes sobre essa ferramenta e suas principais funcionalidades. Vamos conferir?

O que é ORM na programação?

a esquerda a frase ORM, o que é e a direita a imagem de uma mulher pensativa

O principal objetivo das técnicas de mapeamento de objeto-relacional na programação é guardar instâncias de objetos em registros de tabelas.

Por isso, na sigla ORM, cada um dos termos está relacionado a uma parte do processo. Veja a seguir:

  • Object é a parte utilizada com sua linguagem de programação;
  • Relacional é um sistema gerenciador de banco de dados relacional, existem outros tipos de bancos de dados, mas o mais popular é o relacional;
  • Mapeamento é onde o desenvolvedor faz uma ponte entre seus objetos e suas tabelas.

Quando utilizar ORM?

a esquerda a ilustração de um balão com um homem dentro e a direita a frase quando utilizar

Para os desenvolvedores, é uma ótima ferramenta para aumentar a produtividade, por exemplo, para criar CRUDs e acessos à dados. Ou seja, quando o desenvolvedor faz códigos repetitivos, é uma mão na roda.

Além disso, pode ser útil para o desenvolvedor que não conhece muito bem os mecanismos de persistência de dados.

Neste caso, o  mapeamento objeto-relacional não será a solução, mas ao usar essa estrutura pronta, existe uma tendência do desenvolvedor não cometer erros, principalmente, em relação à segurança.

Confira algumas razões para utilizar ferramentas de mapeamento objeto-relacional:

  • Pode ser usado para acelerar o processo de desenvolvimento. Por exemplo, eliminando código repetitivo, mapeando campos de resultados de consultas para membros de objetos e vice-versa.

  • Ajuda a tornar o acesso a dados mais abstrato e portátil. Pois, as classes de implementação ORM sabem como escrever SQL específico do fornecedor.

  • Oferecer suporte ao encapsulamento POO de regras de negócios em sua camada de acesso a dados. Você pode escrever e depurar regras de negócios em sua linguagem de preferência, em vez de usar outros idiomas ou procedimento armazenado.

  • Gerar código clichê para operações básicas de CRUD (Criar, Ler, Atualizar, Excluir). Estruturas ORM podem inspecionar metadados de banco de dados diretamente, ler arquivos de mapeamento de metadados ou usar propriedades de classe declarativas.

Padrões de ORM utilizados no mercado

Existem dois padrões amplamente utilizados, o Data Mapper e o Active Record. Ambos os padrões foram definidos por Martin Fowler em seu livro, Padrões de Arquitetura de Aplicações Corporativas.

Independente da linguagem de programação que o ORM escolhido pelo desenvolvedor será implementado, em geral, segue um padrão bem definido.

Data Mapper

No padrão Data Mapper a classe que irá representar a tabela do banco de dados não deve conhecer os recursos necessários para realizar as transações com banco de dados, por exemplo: inserir, atualizar e apagar informações.

Esses recursos ficam em uma classe própria do ORM, garantindo que as classes que representam a tabela tenha uma única responsabilidade:

Imagem do livro “Padrões de Arquitetura de Aplicações Corporativas”

Para exemplificar, para a maioria dos ORMs que implementam o padrão Data Mapper, independente da linguagem de programação utilizada, terá um código parecido com esse exemplo:

EntityManager entityManager = Persistence.createEntityManagerFactory("persistente-unit");
}entityManager.getTransaction().begin();
Pessoa pessoa = new Pessoa();
pessoa.setId(1);
pessoa.setSobrenome("Souza");
pessoa.setPrenome("José");
pessoa.setNumeroDeDependentes(2);
entityManager.persist(pessoa);
entityManager.getTransaction().commit();

Active Record

No padrão Active Record, a classe que representa a tabela conhece os recursos necessários para realizar as transações no banco de dados. Em geral, recebe uma classe com todos esses comportamentos.

Modelo de diagrama retirado do livro Padrões de Arquitetura de Aplicações Corporativa

Em geral, nos ORMs que implementam o padrão Active Record será criado um código semelhante ao exemplo:

pessoa = pessoa.new
pessoa.sobrenome = "Silva"
pessoa.prenome = "João"
pessoa.numeroDeDependentes = 2
pessoa.save()

Principais ORMs do mercado

a esquerda ilustração de dois prédios e a direita a frase principais ORMs do mercado

Java

Hibernate

Hibernate é uma ferramenta de mapeamento objeto-relacional para a linguagem de programação Java. Ele fornece uma estrutura para mapear um modelo de domínio orientado a objetos para um banco de dados relacional. 

Esse popular ORM Java resolve problemas de incompatibilidade de impedância relacional de objeto, substituindo acessos diretos e persistentes ao banco de dados, por funções de manipulação de objetos de alto nível.

O principal recurso é o mapeamento de classes Java para tabelas de banco de dados e mapeamento de tipos de dados Java para tipos de dados SQL. 

Além disso, fornece recursos de consulta e recuperação de dados, gera chamadas SQL e dispensa o desenvolvedor do manuseio manual e conversão de objetos do conjunto de resultados.

EclipseLink

Esse ORM Java fornece uma estrutura extensível que permite aos desenvolvedores interagir com vários serviços de dados, incluindo bancos de dados, serviços da Web, mapeamento de objetos XML (OXM) e sistemas de informações empresariais (EIS). 

Para isso, suporta vários padrões de persistência, incluindo:

  • Persistência de Jacarta (JPA);
  • Ligação XML de Jacarta (JAXB);
  • Conectores de Jacarta (JCA);
  • Objetos de dados de serviço (SDO).

ActiveJPA

ActiveJPA é uma estrutura de aplicativo de código aberto escrita em Java para mapeamento objeto-relacional. Hoje em dia, muitas aplicações conhecidas no mercado utilizam esse ORM para persistir objetos Java.

Tornou-se muito popular entre os desenvolvedores, pois é um framework leve, baseado em Plain Old Java Objects (POJOS). 

Contudo, não é apenas um framework para  mapeamento objeto-relacional, também oferece diversas funcionalidades para utilizar no desenvolvimento de aplicações corporativas.

Entre as principais inclusões na ActiveJPA destacam-se:

  • POJOS Persistentes;
  • Consultas em Objetos;
  • Configurações simples;
  • Integração e Teste.

Kotlin

Exposed

Exposed é um framework ORM para Kotlin, oferece dois níveis de acesso ao banco de dados: DSL de encapsulamento SQL seguro para tipos e objetos de acesso a dados leves. 

Para ilustrar, esse ORM pode atuar como uma camada intermediária para conectar vários mecanismos de banco de dados e escrever consultas em uma abordagem diferente através da linguagem Kotlin DSL. 

Para exemplificar, H2, MySQL, MariaDB e PostgreSQL são alguns dos bancos de dados suportados pelo Exposed.

C#

Entity Framework

Esse ORM C# é uma versão leve, extensível, de software livre e multiplataforma da popular tecnologia de acesso a dados do Entity Framework. Além disso, é compatível com vários mecanismos de banco de dados.

Para exemplificar, essa biblioteca pode servir como um mapeador relacional de objeto para as seguintes ações:

  • Permite que os desenvolvedores do .NET trabalhem com um banco de dados usando objetos .NET.
  • Elimina a necessidade da maior parte do código de acesso a dados que normalmente precisa ser gravado.

Afinal, com uma ferramenta de  mapeamento objeto-relacional, os desenvolvedores podem trabalhar em um nível mais alto de abstração quando lidam com dados. 

Com isso, podem criar e manter aplicativos orientados a dados com menos códigos quando comparado com aplicativos tradicionais. 

Nas empresas de tecnologia, o Entity Framework é uma solução de  mapeamento objeto-relacional utilizada frequentemente para desenvolvimento na plataforma Microsoft.

Nhibernate

Esse é um ORM para a plataforma Microsoft .NET que fornece uma estrutura para mapear um modelo de domínio orientado a objetos, para um banco de dados relacional tradicional. 

É um software livre e de código aberto distribuído sob a GNU Lesser General Public License. Seu principal objetivo é ajudar o desenvolvedor com uma parte significativa das tarefas de programação relacionadas à persistência de dados relacionais. 

Dapper

Dapper é um ORM de código aberto sob a licença Apache projetado para ser usado quando o desenvolvedor deseja trabalhar com dados de maneira tipada, como objetos de negócios em um aplicativo .NET.

Com isso, enquadra-se em uma família de ferramentas conhecidas como micro-ORMs. Essas ferramentas executam apenas um subconjunto da funcionalidade dos mapeadores de relações de objeto completos, como o Entity Framework Core

Por isso, a Dapper concentra seus esforços exclusivamente no O e M do ORM. Além disso, não traduz consultas escritas em linguagens .NET para SQL como um ORM completo. Neste caso, é preciso ter alguém da equipe para escrever consultas em SQL.

Node

Sequelize

Sequelize é um ORM TypeScript e Node.js para Postgres, MySQL, MariaDB, SQLite e SQL Server. Em resumo, esse  mapeamento objeto-relacional apresenta suporte a transações sólidas, relações, carregamento rápido e lento, replicação de leitura, entre outras.

Em síntese, essa biblioteca possui um mecanismo de migração muito potente para transformar um esquema já existente de banco de dados em uma nova versão.

Além disso, fornece mecanismos de sincronização de banco de dados, para criar estrutura de banco de dados especificando a estrutura do modelo.

Essa ferramenta está disponível via NPM e sua instalação pode ser feita executando o comando no Node.js: 

npm install --save sequelize

PHP

Doctrine

Esse ORM PHP é um conjunto de bibliotecas focadas em fornecer aos desenvolvedores serviços de persistência e funcionalidades relacionadas. 

Seus principais objetivos são aprovisionar um mapeador relacional de objeto e uma camada de abstração de banco de dados sobre qual é construído.

Um dos principais recursos do Doctrine é a opção de escrever consultas de banco de dados em Doctrine Query Language (DQL), um dialeto de SQL orientado a objetos.

Para isso, os desenvolvedores dos populares frameworks PHP, Symfony e Laminas têm suporte oficial para uso para Doctrine. Enquanto, os pacotes Doctrine de terceiros estão disponíveis para Laravel, CodeIgniter e outros.

Eloquent

Esse é um  mapeamento objeto-relacional embutido no Laravel que fornece uma implementação elegante e simples do ActiveRecord, para o desenvolvedor trabalhar com mais agilidade com banco de dados. 

Para exemplificar, cada tabela de banco de dados tem um modelo correspondente usado para interagir com essa tabela. Esses modelos permitem consultar dados em suas tabelas, bem como, inserir novos registros na tabela.

Essa biblioteca fornece métodos assessores (accessors methods) e propriedades que correspondem a cada célula de uma linha. Além disso, fornece métodos para estabelecer relacionamentos com outros Models e para acessar Models relacionados.

Ruby

Ruby On Rails ActiveRecord

Ruby on Rails é uma estrutura de aplicação web do lado do servidor escrita na linguagem de programação Ruby sob a licença MIT. É um framework model–view–controller (MVC), que fornece estruturas padrão para um banco de dados, um serviço web e páginas web.

Em resumo, essa biblioteca incentiva e facilita o uso de padrões da web como JSON ou XML para transferência de dados e HTML, CSS e JavaScript para interface com o usuário.

Além do MVC, Ruby on Rails enfatiza o uso de outros padrões de engenharia de softwares conhecidos e paradigmas, incluindo convenção sobre configuração (CoC), não se repita (DRY) e o padrão de registro ativo.

Para os desenvolvedores, o surgimento desse framework influenciou no desenvolvimento de aplicativos da Web com recursos inovadores, como criações de tabelas de banco de dados, migrações e scaffolding de visualizações para desenvolvimento rápido de aplicativos. 

Datamapper

DataMapper é um mapeador relacional de objetos escrito em PHP para CodeIgniter. Foi projetado para mapear suas tabelas de banco de dados em objetos fáceis de trabalhar e totalmente cientes dos relacionamentos entre si.

No Data Mapper a entity (classe ou objeto de registro) está desacoplada do banco de dados, com isso, modela as informações e comportamento de forma abstrata conforme as regras de negócio do domínio.

Além disso, delega o armazenamento no banco de dados para outra camada, chamada de repositório.

Entretanto, é importante distinguir que o conceito do Data Mapper surgiu através do Domain-Driven Design(DDD), uma arquitetura multi-camada, onde a camada do domínio é separada da camada de infraestrutura.

Python

DjangoORM

Esse ORM Python é fornecido com construções especiais de abstração para serem usadas pelos desenvolvedores para criar consultas complexas ao banco de dados.

Por exemplo, ao invés de realizar uma ação direta no banco de dados com código SQL, é possível utilizar o DjangoORM como ponte de comunicação entre o banco e a aplicação.

Esse framework inclui uma camada de mapeamento objeto-relacional padrão que pode ser usada para interagir com dados de aplicativos de vários bancos de dados relacionais, como SQLite , PostgreSQL e MySQL.

Com esse ORM Python, ao invés de escrever o código SQL, o desenvolvedor usa esse framework para realizar essa tarefa. Além disso, é possível concatenar quantos filtros desejar para um QuerySet, e não atingirá o banco de dados até que o QuerySet seja avaliado.

SqlAlchemy

SQLAlchemy é um conjunto de ferramentas Python SQL, esse é o  mapeamento objeto-relacional que oferece aos desenvolvedores de aplicativos todo o poder e flexibilidade do SQL.

Em resumo, ele fornece um conjunto completo de padrões de persistência de nível empresarial projetados para acesso eficiente e de alto desempenho ao banco de dados, adaptados em uma linguagem de domínio simples e com estilo Pythonico.

Conclusão

Entre os profissionais de tecnologia, como os desenvolvedores, são comuns discussões sobre qual mapeamento objeto-relacional usar para implementar os padrões Data Mapper ou Active Record.

Contudo, cada desenvolvedor tem a sua preferência e podem argumentar sobre as vantagens de um ou outro. Apesar disso, na área de tecnologia não existe uma única verdade, pois são muitas as possibilidades.

Por isso, para quem está começando na carreira de desenvolvedor, é interessante investir tempo para estudar ORMs relacionados a uma linguagem de programação utilizada para trabalhar em ambos os padrões.

Desse modo, você terá um conhecimento mais amplo para escolher os padrões Data Mapper ou Active Record, dependendo dos requisitos do projeto.

Revelo: sua plataforma de recrutamento tech

Se você está em busca de uma oportunidade na área de tecnologia, na Revelo você encontra oportunidades para desenvolvedor em empresas do Brasil e do exterior.

Basta se cadastrar na Revelo, e ficar disponível para receber convites de entrevistas. Além disso, com a opção Revelo Remoto, você poderá participar do processo seletivo de forma digital, desde a entrevista até a assinatura do contrato.

Experimente e encontre sua próxima oportunidade profissional!

Related Posts