¿Qué es un ORM y dónde puedo obtener más información al respecto?

Alguien sugirió que use un ORM para un proyecto que estoy diseñando, pero tengo problemas para encontrar información sobre qué es o cómo funciona. ¿Alguien puede darme una breve explicación o un enlace sobre dónde puedo obtener más información al respecto?

Introducción

La correlación de objetos relacionales (ORM) es una técnica que le permite consultar y manipular datos de una base de datos utilizando un paradigma orientado a objetos. Cuando hablamos 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 normal escrita en el idioma de su elección que encapsula el código necesario para manipular los datos, por lo que ya no usa SQL; usted 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 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"); 

La parte mecánica se trata automáticamente a través de la biblioteca ORM.

Pros y contras

Usar ORM ahorra mucho tiempo porque:

  • SECO : Usted escribe su modelo de datos en un solo lugar, y es más fácil actualizar, mantener y reutilizar el código.
  • Se realizan 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 progtwigdores web realmente lo chupan, porque SQL se trata como un lenguaje “secundario”, cuando en realidad es muy poderoso y complejo).
  • Desinfección; usar 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 tu forma natural de encoding (¡es tu lenguaje!).
  • Se abstrae el sistema de base de datos, por lo que puede cambiarlo cuando lo desee.
  • El modelo está débilmente ligado al rest de la aplicación, por lo que puede cambiarlo o usarlo en cualquier otro lugar.
  • Le permite usar bondad OOP como 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.
  • Se abstrae la base de datos. Si bien está bien si sabes lo que está sucediendo detrás de la escena, es una trampa para los nuevos progtwigdores que pueden escribir declaraciones muy codiciosas, como un golpe fuerte en un bucle for .

¿Cómo aprender sobre ORM?

Bueno, usa uno. Cualquiera que sea la biblioteca ORM que elija, todos usan los mismos principios. Hay muchas bibliotecas ORM por aquí:

  • Java: Hibernate .
  • PHP: Propel o Doctrine (prefiero el último).
  • Python: el ORM de Django o SQLAlchemy (mi biblioteca de ORM favorita).
  • C #: NHibernate o Entity Framework

Si desea probar una biblioteca ORM en la progtwigción web, sería mejor utilizar una stack de framework completo como:

  • Symfony (PHP, usando Propel o Doctrine).
  • Django (Python, usando un ORM interno).

No intente escribir su propio ORM, a menos que esté intentando aprender algo. Este es un trabajo gigantesco, y los viejos tomaron mucho tiempo y trabajo antes de que se volvieran confiables.

¿Alguien puede darme una breve explicación …

Por supuesto.

ORM significa “Objeto para mapeo relacional” donde

  • La parte Object es la que usa con su lenguaje de progtwigción (python en este caso)

  • La parte Relacional es un Sistema de Base de Datos Relacional (una base de datos que es) hay otros tipos de bases de datos, pero la más popular es relacional (usted sabe tablas, columnas, pk fk, etc. ej. Oracle MySQL, MS-SQL)

  • Y finalmente, la parte de Mapeo es donde haces un puente entre tus objetos y tus tablas.

En aplicaciones donde no utiliza un marco ORM, puede hacerlo a mano. El uso de un marco ORM le permitirá reducir la plantilla necesaria para crear la solución.

Entonces digamos que tienes este objeto.

  class Employee: def __init__( self, name ): self.__name = name def getName( self ): return self.__name #etc. 

y la mesa

  create table employee( name varcar(10), -- etc ) 

El uso de un marco ORM le permitirá mapear ese objeto con un registro db automágicamente y escribir algo como:

  emp = Employee("Ryan") orm.save( emp ) 

Y haga que el empleado se inserte en la base de datos.

Vaya, no fue tan breve, pero espero que sea lo suficientemente simple para ver otros artículos que lees.

Un ORM (Object Relational Mapper) es una pieza / capa de software que ayuda a mapear los Objetos de su código a su base de datos.

Algunos manejan más aspectos que otros … pero el propósito es quitar algo del peso de la capa de datos de los hombros del desarrollador.

Aquí hay un breve clip de Martin Fowler (Data Mapper):

Patrones de asignadores de datos de architecture de aplicaciones empresariales

El primer capítulo del libro Hibernate Java Persistence with Hibernate (3ª edición) tiene una excelente visión general de los conceptos generales de ORM y analiza la motivación y el diseño de los ORM. Muy recomendado, incluso si no trabajas con Java.

Storm es una gran opción para quienes usan Python.

Este es un gran tema. Elija un buen libro de hibernación y explique detalladamente el ORM antes de llegar al material esencial de Hibernate.

https://www.hibernate.org/

Como todos los acrónimos, es ambiguo, pero supongo que se refieren al mapeador relacional de objetos : una forma de cubrir los ojos y hacer creer que no hay SQL debajo, sino que son todos objetos ;-). No es realmente cierto, por supuesto, y no sin problemas: el siempre colorido Jeff Atwood ha descrito a 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! -)

El modelo de objetos se refiere a los siguientes tres conceptos Herencia de encapsulación de abstracción de datos El modelo relacional usaba el concepto básico de una relación o tabla. Los productos de mapeo relacional de objetos (mapeo OR) integran capacidades de lenguaje de progtwigción de objetos con bases de datos relacionales.

DALMP http://code.google.com/p/dalmp/ podría ser una buena aplicación para php / mysql que actualmente admite muchos backends de caches como redis / memcache / apc