Introducción
El mapeo relacional de objetos (ORM) es una técnica que le permite consultar y manipular datos de una base de datos utilizando un paradigma orientado a objetos. Cuando se habla de ORM, la mayoría de las personas se refieren a una biblioteca que implementa la técnica de Mapeo Relacional de Objetos, de ahí la frase "un ORM".
Una biblioteca ORM es una biblioteca completamente ordinaria escrita en su idioma de elección que encapsula el código necesario para manipular los datos, por lo que ya no usa SQL; interactúa directamente con un objeto en el mismo idioma que está utilizando.
Por ejemplo, aquí hay un caso completamente imaginario con un pseudo lenguaje:
Tienes una clase de libros, quieres recuperar todos los libros de los cuales el autor es "Linus". Manualmente, harías algo así:
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);
}
Con una biblioteca ORM, se vería así:
book_list = BookTable.query(author="Linus");
La parte mecánica se cuida automáticamente a través de la biblioteca ORM.
Pros y contras
Usar ORM ahorra mucho tiempo porque:
- DRY : escribe su modelo de datos en un solo lugar, y es más fácil actualizar, mantener y reutilizar el código.
- Se hacen muchas cosas automáticamente, desde el manejo de la base de datos hasta I18N .
- Te obliga a escribir código MVC , que, al final, hace que tu código sea un poco más limpio.
- No tiene que escribir SQL mal formado (la mayoría de los programadores web realmente apestan, porque SQL se trata como un lenguaje "secundario", cuando en realidad es muy poderoso y complejo).
- Desinfectante; El uso de declaraciones o transacciones preparadas es tan fácil como llamar a un método.
Usar una biblioteca ORM es más flexible porque:
- Se adapta a su forma natural de codificación (¡es su idioma!).
- Resume el sistema de base de datos, por lo que puede cambiarlo cuando lo desee.
- El modelo está débilmente vinculado al resto de la aplicación, por lo que puede cambiarlo o usarlo en cualquier otro lugar.
- Le permite utilizar la bondad de OOP como la herencia de datos sin dolor de cabeza.
Pero ORM puede ser un dolor:
- Tienes que aprenderlo, y las bibliotecas ORM no son herramientas livianas;
- Tienes que configurarlo. El mismo problema.
- El rendimiento está bien para las consultas habituales, pero un maestro SQL siempre lo hará mejor con su propio SQL para grandes proyectos.
- Resume el DB. Si bien está bien si sabes lo que sucede detrás de la escena, es una trampa para los nuevos programadores que pueden escribir declaraciones muy ambiciosas, como un gran golpe en un
for
bucle.
¿Cómo aprender sobre ORM?
Bueno, usa uno. Cualquiera que sea la biblioteca ORM que elija, todas usan los mismos principios. Hay muchas bibliotecas ORM por aquí:
Si desea probar una biblioteca ORM en programación web, sería mejor usar una pila de framework completa como:
- Symfony (PHP, usando Propel o Doctrine).
- Django (Python, usando un ORM interno).
No intente escribir su propio ORM, a menos que esté tratando de aprender algo. Este es un trabajo gigantesco, y los viejos tomaban mucho tiempo y trabajo antes de volverse confiables.