Alguien me ha sugerido que utilice un ORM para un proyecto que estoy diseñando, pero me cuesta encontrar información sobre qué es o cómo funciona.
¿Alguien me puede dar una breve explicación de lo que es un ORM y cómo funciona y cómo debo empezar a usar uno?
Object-Relational Mapping (ORM) es una técnica que 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 la gente se refiere a una biblioteca que implementa la técnica de Mapeo Objeto-Relacional, de ahí la frase "un ORM".
Una biblioteca ORM es una biblioteca completamente normal escrita en el lenguaje de su elección que encapsula el código necesario para manipular los datos, de modo que ya no utiliza SQL, sino que interactúa directamente con un objeto en el mismo lenguaje que está utilizando.
Por ejemplo, he aquí un caso completamente imaginario con un pseudolenguaje:
Tienes una clase libro, quieres recuperar todos los libros cuyo 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");
De la parte mecánica se encarga automáticamente la librería ORM.
Usar ORM ahorra mucho tiempo porque:
Usar una librería ORM es más flexible porque:
Pero ORM puede ser un dolor:
for
.Bueno, usa uno. Sea cual sea la librería ORM que elijas, todas utilizan los mismos principios. Hay muchas librerías ORM por aquí:
Si quieres probar una librería ORM en programación Web, sería mejor que usaras una pila completa de frameworks como:
No intentes escribir tu propio ORM, a menos que estés intentando aprender algo. Es un trabajo gigantesco, y los antiguos requerían mucho tiempo y trabajo antes de ser fiables.
Un ORM (Object Relational Mapper) es una pieza/capa de software que ayuda a mapear tus Objetos de código a tu base de datos.
Algunos manejan más aspectos que otros... pero el propósito es quitar parte del peso de la capa de datos de los hombros del desarrollador.
He aquí un breve vídeo de Martin Fowler (Data Mapper):
Patterns of Enterprise Application Architecture Data Mappers
Como todos los acrónimos, es ambiguo, pero supongo que se refieren a object-relational mapper, una forma de taparse los ojos y hacer creer que no hay SQL debajo, sino que todo son objetos;-). No es realmente cierto, por supuesto, y no está exento de problemas: el siempre pintoresco Jeff Atwood ha descrito ORM como el Vietnam de CS;-). Pero, si sabes poco o nada de SQL, y tienes un problema bastante simple / a pequeña escala, ¡pueden ahorrarte tiempo!-)