¿Qué es un ORM, cómo funciona y cómo debo usar uno? [cerrado]


230

Alguien me sugirió que usara 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 de qué es un ORM y cómo funciona y cómo debo comenzar a usar uno?


8
Encontré esta pregunta pero es de 2009 y no sé si ya domina ORM pero busca Entity Framework en CodePlex C # ( entityframework.codeplex.com ) Aquí está el código fuente del que puede aprender. También puedes leer esto. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Maximus Decimus

1
Solo quiero señalar que la cámara ORM también se relaciona con el modelado de roles de objetos en.wikipedia.org/wiki/Object-role_modeling
O-9

1
Esta es una pregunta útil y los votos para la primera respuesta parecen confirmarlo. Una breve descripción de lo que es ORM no requiere opinión. Solo porque el usuario solicita un enlace para comenzar, la pregunta se marca fuera de tema. Siento que esta es una reacción exagerada frecuente de los moderadores.
NeilG

3
@NeilG Una pregunta cerrada significa que la pregunta está fuera de tema. Podría haber información útil en las respuestas, pero eso no hace que la pregunta sea sobre el tema. Además, no se eliminará, permanecerá aquí, pero aún necesitamos mantener el SO limpio y sobre el tema para que funcione de la mejor manera. Entonces, para responder su primer comentario: esta no es una pregunta útil, hay respuestas útiles.
M--

1
@NeilG El problema es que la pregunta incluye una solicitud de recursos (tanto en el título como en la pregunta). Tales solicitudes no están relacionadas con el tema, en gran medida porque las personas simplemente publican un enlace a su recurso favorito, como ha sucedido en varias de las respuestas aquí. Eliminar la solicitud de recursos de la pregunta invalidaría algunas respuestas existentes. Como usuarios habituales, no se nos permite editar la pregunta para invalidar las respuestas. Por lo tanto, debe estar cerrado. Si la pregunta no fue respondida, entonces podría editarse para eliminar esas solicitudes y dejarla abierta.
Makyen

Respuestas:


483

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 forbucle.

¿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.


50

¿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 programación (python en este caso)

  • La parte relacional es un sistema de gestión de bases de datos relacionales (una base de datos), hay otros tipos de bases de datos, pero la más popular es relacional (ya conoce tablas, columnas, pk fk, etc., por ejemplo, Oracle MySQL, MS-SQL)

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

En las aplicaciones en las que no usa un marco ORM, lo hace a mano. El uso de un marco ORM le permitiría 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ía asignar ese objeto con un registro db automáticamente 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 como para captar otros artículos que lees.



4

Al igual que todos los acrónimos, es ambiguo, pero supongo que significan 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 conoce poco o nada de SQL y tiene un problema bastante simple / a pequeña escala, ¡pueden ahorrarle tiempo! -)


2

El modelo de objetos se ocupa de los siguientes tres conceptos: abstracción de datos, herencia de encapsulación, el modelo relacional utiliza el concepto básico de una relación o tabla. Los productos de mapeo relacional de objetos (mapeo OR) integran capacidades de lenguaje de programación de objetos con bases de datos relacionales.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.