2011-04-08 10 views
5

Hace poco empezar a estudiar ORM, una pregunta saltó a mi mente:¿Por qué usar un ORM en PHP?

aplicaciones PHP utilizan sobre todo MySQL y SQLite, casi todos los servidores PHP se la instalada, por lo que vale la pena utilizar ORM en PHP para ser base de datos autónoma?

¿Qué hay del rendimiento?

Respuesta

5

independencia de la base de datos no es la razón principal para usar un ORM. lo que quieres es una abstracción general de la base de datos. Esto podría implicar: simplicidad de uso, desarrollo más rápido, independencia de la base de datos, ... en cualquier caso, generalmente vale la pena usar un ORM. si su aplicación absorbe toda su potencia de CPU, entonces puede usar algunos SQL simples para optimizar ciertas consultas. Supongo que este es un caso raro, sin embargo.

es posible que desee leer esto: What are the advantages of using an ORM?

+2

Personalmente creo que no vale la pena gastar el tiempo en aprenderlo. Sí, hay pocos ejemplos posibles cuando es genial usarlo, pero la regla de programación n. ° 1 es que los requisitos cambien y terminará optimizando todo con SQL, y lo lamentará, entonces, ¿por qué molestarse en el primer lugar? Puede (¡y debería!) Abstraer la capa de la base de datos con patrones arquitectónicos de todos modos. – Srneczek

4

Hay varias razones por las que puede optar por utilizar un ORM, unos pocos se me ocurre:

  • La mayoría de ORM le permitirá validar los datos para INSERT y UPDATE.
  • ORMs le permitirá mapear los nombres de las columnas en el db a los nombres de los campos de trabajo en su db. Lo cual puede ser útil si está trabajando con una base de datos que otra persona diseñó y tiene nombres de columna desconocidos.
  • También manejarán las relaciones muy bien para usted también. (por ejemplo, si busca una fila que tiene una relación 1: m en una de las columnas, obtendrá un subcampo de los elementos relacionados sin tener que hacer otra consulta manualmente).

La mayoría de las razones para usar un ORM se relacionan con la velocidad/facilidad de desarrollo.

En términos de rendimiento, he usado doctrine con php anteriormente y la hidratación ha creado una gran sobrecarga en comparación con solo ir a buscar las filas.

1

¿Qué sucede si su servidor ejecuta PostgreSql o SQL Server? Otros dos motores de base de datos muy comunes.

¿Qué sucede si desea conectarse a una base de datos heredada?

Además, ¿alguna vez ha mantenido proyectos grandes que se conecten directamente a la base de datos? Me da escalofríos cuando abro un archivo lleno de llamadas mysql_query.

En cuanto a rendimiento ... Depende del ORM en cuestión. Estoy más familiarizado con ellos en una configuración de .NET, y ciertamente en ese entorno hay una gran variación en el rendimiento, pero esto suele ser una compensación con características.

El uso de un ORM aumentará la ortogonalidad entre su código y la base de datos, esto facilitará su desarrollo y mantenimiento. La capacidad de cambiar entre bases de datos es un beneficio de esto, pero ciertamente no es la única razón.

1

El uso de un ORM alivia la redundancia de escribir un código repetitivo relacionado con la apertura de una conexión de base de datos, agrupando conexiones, preparando una declaración, ejecutando la declaración, asignando los resultados de la ejecución a algo más significativo y finalmente cerrando la conexión.

Es mucho más limpio hacer algo como instanciar un objeto, establecer sus propiedades e invocar una operación de salvar en el objeto.Vale la pena usar este tipo de valor solo con un ORM sobre la codificación manual de los muchos pasos necesarios para interactuar con una base de datos.

Además, con un ORM limpio es posible intercambiar bases de datos con un cambio mínimo en la aplicación.

Espero que ayude.

3

Para independencia de la base de datos (y rendimiento) use PDO. Está integrado, sus declaraciones preparadas son excelentes para prevenir las vulnerabilidades de inyección de SQL.

Si está atascado en O/RM, incluso viene con un pequeño toque de OO ... Consulte PDOStatement::fetch (y algunos de los otros métodos fetchXxx).

1

ORM es una pérdida de tiempo. Lo cual es extraño, ya que fue diseñado para ahorrarle tiempo :) pero es verdad. Tuve la oportunidad de usar ORM en varios idiomas y no vale la pena. Básicamente, existen 2 tipos de proyectos:

  1. projcets simples con pocas mesas (a veces incluso 1 mesa), sin autenticación etc., digamos tablas independientes simples
  2. proyectos complejos con muchas mesas, opiniones y conectados otras cosas. Posiblemente más bases de datos también.

    1. Sí siente libre de utilizar ORM si su familiarizado con la configuración y la forma de utilizarlo su paz de la torta, pero nunca se sabe si cambian los requisitos del proyecto y terminas regreting alguna vez pisado el campo ORM :)
    2. No use ORM ya que pasará más tiempo reparando las cosas "generadas automáticamente" que proporciona ORM. Creo que algunos ORM están bastante avanzados hoy en día, pero ORM está aquí como (conjetura salvaje) 10 años (en realidad creo que es mucho más). Y es obvio que es un callejón sin salida. No va a reemplazar la forma estándar en el futuro, hoy la tendencia es las bases de datos NOSQL ect.

En mi opinión ORM está vivo sólo gracias a los marcos que utilizan internamente. Y el rendimiento? No estoy seguro (ya que no lo uso más) pero creo que el rendimiento también podría ser un problema. Usted tiene que pagar al menos algún precio por el hecho de que está abstraído de la consulta de la base de datos, ¿verdad? Creo que ORM fue una gran idea en papel, pero simplemente no funciona bien.