Introdução
O Mapeamento Relacional a Objetos (ORM) é uma técnica que permite consultar e manipular dados de um banco de dados usando um paradigma orientado a objetos. Ao falar sobre ORM, a maioria das pessoas se refere a uma biblioteca que implementa a técnica de mapeamento objeto-relacional, daí a frase "um ORM".
Uma biblioteca ORM é uma biblioteca completamente comum, escrita em seu idioma preferido, que encapsula o código necessário para manipular os dados, para que você não use mais o SQL; você interage diretamente com um objeto no mesmo idioma que está usando.
Por exemplo, aqui está um caso completamente imaginário com uma pseudo-linguagem:
Você tem uma aula de livros e deseja recuperar todos os livros dos quais o autor é "Linus". Manualmente, você faria algo assim:
book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
book = new Book();
book.setAuthor(row.get('author');
book_list.add(book);
}
Com uma biblioteca ORM, ficaria assim:
book_list = BookTable.query(author="Linus");
A parte mecânica é cuidada automaticamente através da biblioteca ORM.
Prós e contras
O uso do ORM economiza muito tempo porque:
- SECA : Você escreve seu modelo de dados em apenas um lugar e é mais fácil atualizar, manter e reutilizar o código.
- Muitas coisas são feitas automaticamente, desde o manuseio do banco de dados até a I18N .
- Obriga você a escrever o código MVC , o que, no final, torna seu código um pouco mais limpo.
- Você não precisa escrever SQL mal formado (a maioria dos programadores da Web realmente é péssima, porque o SQL é tratado como uma linguagem "sub", quando na realidade é muito poderosa e complexa).
- Saneando; usar instruções ou transações preparadas é tão fácil quanto chamar um método.
O uso de uma biblioteca ORM é mais flexível porque:
- Ele se encaixa no seu modo natural de codificação (é o seu idioma!).
- Ele abstrai o sistema DB, para que você possa alterá-lo quando quiser.
- O modelo está fracamente vinculado ao restante do aplicativo, para que você possa alterá-lo ou usá-lo em qualquer outro lugar.
- Permite usar a bondade de OOP como herança de dados sem dor de cabeça.
Mas a ORM pode ser uma dor:
- Você precisa aprender e as bibliotecas ORM não são ferramentas leves;
- Você precisa configurá-lo. Mesmo problema.
- O desempenho é bom para consultas comuns, mas um mestre em SQL sempre se sai melhor com seu próprio SQL para grandes projetos.
- Abstrai o banco de dados. Embora esteja tudo bem se você souber o que está acontecendo nos bastidores, é uma armadilha para os novos programadores que podem escrever declarações muito gananciosas, como um golpe pesado em um
for
loop.
Como aprender sobre o ORM?
Bem, use um. Qualquer que seja a biblioteca ORM escolhida, todas elas usam os mesmos princípios. Existem muitas bibliotecas ORM por aqui:
Se você quiser experimentar uma biblioteca ORM em programação na Web, seria melhor usar uma pilha de estrutura inteira como:
- Symfony (PHP, usando Propel ou Doutrina).
- Django (Python, usando um ORM interno).
Não tente escrever seu próprio ORM, a menos que esteja tentando aprender alguma coisa. Este é um trabalho gigantesco, e os antigos levavam muito tempo e trabalho antes de se tornarem confiáveis.