¿Cuándo usar un ORM?

Artículo

¿Cuándo usar un ORM?

La decisión sobre usar o no un ORM debería girar en torno a dos ejes fundamentales: la complejidad en términos de Modelo de Entidades de nuestra aplicación y el rendimiento.

La principal ventaja que nos aporta el uso de un ORM es la reducción de código a escribir en nuestra aplicación en comparación con las técnicas tradicionales de acceso a datos sobre RDBMS. La principal desventaja derivada del alto nivel de abstracción generado entre el modelo de entidades de nuestra aplicación y el RDBMS subyacente es que se tiende a “pasar por alto” toda la “magia” que el ORM genera para interactuar con la base de datos relacional física. Esto, en último término, puede llevar a importantes deficiencias en el rendimiento de las aplicaciones. Así, el rendimiento de nuestra aplicación no solo depende del ORM, sino del uso que hacemos de él.

Antes de comenzar las argumentaciones, hay que resaltar que la web está llena de partidarios y detractores del uso de ORMs. Además, existe un gran número de implementaciones de distintos proveedores, ofreciendo servicios con diferentes características. Por ello, la intención es solo la de aportar una visión al debate para facilitar la decisión de usar o no este tipo de componentes y en caso de utilizarse, qué características debería tener el ORM para encajar mejor en nuestra aplicación.

La decisión sobre usar o no un ORM debería girar en torno a dos ejes fundamentales:

  • Complejidad en términos de Modelo de Entidades de nuestra aplicación.
  • Rendimiento.

En base a estos dos ejes principales la recomendación sería la siguiente:

  • Alta complejidad del Modelo de Entidades + Se acepta Rendimiento medio o bajo. Altamente recomendable. El ORM nos permitirá acelerar el desarrollo de la aplicación evitando la escritura repetitiva de código para ejecutar operaciones CRUD. Además, ya que el rendimiento de las consultas no es crítico, podremos confiar en el ORM para interactuar con el RDBMS sin dedicar mucho tiempo a supervisar las acciones ejecutadas.
  • Alta complejidad del Modelo de Entidades + Rendimiento debe ser alto.Recomendable con condiciones. Como en el caso anterior, el ORM nos permitirá acelerar la implementación de nuestra aplicación, pero el modo de interactuar con dicho ORM deberá ser diseñado y supervisado por perfiles expertos, capaces de visionar y anticipar la forma en la que el ORM generará SQL eficiente.
  • Baja complejidad del Modelo de Entidades + Rendimiento debe ser alto. No recomendable (salvo excepciones). En este caso aconsejaría el uso de una capa de acceso a datos más ligera con objetos personalizados para ejecutar queries optimizadas para cada operación CRUD. La existencia de pocas entidades no nos ahorrará mucho tiempo en la escritura de código y la exigencia de altos rendimientos nos obligará a supervisar tanto la interacción con el ORM como el código SQL generado.

No obstante, a modo de excepción, podríamos evaluar el uso de algún micro-ORM muy ligero tipo Dapper dependiendo de las especificaciones de nuestra aplicación y nuestros criterios personales. Éste nos proporcionará servicios simples de “mapeo” con uso de SQL personalizado.

  • Baja complejidad del Modelo de Entidades + Se acepta Rendimiento medio o bajo. Opcional.Vaya por delante que pocas aplicaciones he encontrado con estas premisas a lo largo de mi carrera profesional. En todo caso, la elección con estas premisas será completamente opcional.
  • Por último, la elección en casos intermedios dependerá de los criterios personales de cada uno valorando las diferentes ventajas y desventajas, además de restricciones concretas a aplicar en la solución a desarrollar.

¿Entity Framework Core o Entity Framework 6?

Suponiendo que nos hemos decantado por tecnología Microsoft Entity Framework como selección de nuestro ORM, convendría tener presente algunos puntos fundamentales para elegir entre la versión clásica y la versión core de este popular ORM.

Para aplicaciones nuevas se recomienda usar Entity Framework Core si la aplicación a desarrollar no exige ninguna funcionalidad todavía no implementada en esta versión, es decir, todavía no ha sido “migrada” desde la versión clásica y, se quiere aprovechar todas las características de .Net Core (ligereza, multiplataforma, etc.)

Si la aplicación únicamente va a ser desplegada en entornos Windows y no requiere nueva funcionalidad específica creada a partir de Entity Framework Core, el uso de Entity Framework 6 puede ser la opción correcta para su aplicación.

José Antonio Muro

José Antonio es Ingeniero Superior de Telecomunicación por la Universidad de Zaragoza, con más de 15 años de experiencia profesional en entornos IT. Se unió a la Firma en 2017 como jefe de equipo en la competencia Microsoft dentro del área de DxD de Deloitte. A lo largo de su carrera profesional ha participado en múltiples proyectos, fundamentalmente en entornos basados en tecnologías Microsoft .Net con bases de datos relacionales y multidimensionales. Asimismo, posee varias certificaciones en tecnologías Microsoft desde 2003, como MCAD o MCPD.

Did you find this useful?