By now, only Spanish version is available. Let me know if you are interested in the English one and I will make an effort to translate | Original version from the Deloitte Spain site.
Este artículo es el primero de una serie de tres que tienen como objetivo analizar las ventajas y desventajas del uso de ORMs (Object Relational Mappings) o, Mapeadores de Objetos Relacionales, así como proporcionar argumentos para decidir su inclusión o no en nuestro desarrollo de aplicaciones con especial atención en cómo afecta su uso al rendimiento global de las mismas.
¿Qué es un ORM?
Un ORM es un modelo de programación que permite mapear las estructuras de una base de datos relacional (SQL Server, Oracle, MySQL, etc.), en adelante RDBMS (Relational Database Management System), sobre una estructura lógica de entidades con el objeto de simplificar y acelerar el desarrollo de nuestras aplicaciones.
Las estructuras de la base de datos relacional quedan vinculadas con las entidades lógicas o base de datos virtual definida en el ORM, de tal modo que las acciones CRUD (Create, Read, Update, Delete) a ejecutar sobre la base de datos física se realizan de forma indirecta por medio del ORM.
La consecuencia más directa que se infiere del párrafo anterior es que, además de “mapear”, los ORMs tienden a “liberarnos” de la escritura o generación manual de código SQL (Structured Query Language) necesario para realizar las queries o consultas y gestionar la persistencia de datos en el RDBMS.
Así, los objetos o entidades de la base de datos virtual creada en nuestro ORM podrán ser manipulados por medio de algún lenguaje de nuestro interés según el tipo de ORM utilizado, por ejemplo, LINQ sobre Entity Framework de Microsoft. La interacción con el RDBMS quedará delegada en los métodos de actualización correspondientes proporcionados por el ORM. Los ORMs más completos ofrecen servicios para persistir todos los cambios en los estados de las entidades, previo seguimiento o tracking automático, sin escribir una sola línea de SQL.
Llegados a este punto, parece claro que el hecho de “atacar” directamente a las entidades de la base de datos virtual sin necesidad de generar código SQL nos reportará importantes ventajas a la hora de acelerar el desarrollo o implementación de nuestras aplicaciones, pero me gustaría anticipar dos cuestiones básicas a desarrollar en sendos artículos posteriores:
- ¿En qué condiciones encaja mejor el uso de un ORM?
- Si decidimos usar un ORM sobre un RDBMS, ¿nos “olvidamos” completamente entonces del SQL?
ORMs en el mercado actual
- Microsoft Entity Framework 6.0: Microsoft Entity Framework se publicó por primera vez en 2008, como parte de .NET Framework 3.5 SP1 y Visual Studio 2008 SP1. A partir de la versión 4.1, se ha distribuido como paquete NuGet independiente convirtiéndose en uno de los más populares en NuGet.org. Sólo para plataforma Windows. Muy estable. Open Source. Proporciona servicios avanzados de modelado y seguimiento de estados de entidades, persistencia automática de cambios, caching, gestión de transacciones, etc.
- Microsoft Entity Framework Core 2.0: Nueva implementación de Entity Framework en versión Core. Más ligera, extensible y multiplataforma (Windows, Linux, Mac). Ofrece un rendimiento más potente en comparación con la versión desarrollada específicamente para .Net Framework. En continua evolución. Open Source. Puede ejecutarse sobre .Net Framework 4.6.1, .Net Core 2.0 o posteriores.
- Microsoft Entity Framework Core 2.1: Versión más reciente de Entity Framework Core lanzada a finales de mayo de 2018. Incluye mejoras funcionales y de rendimiento, así como correcciones sobre la versión anterior. No obstante, no toda la funcionalidad de Entity Framework 6.0 ha sido migrada todavía a esta última versión de Entity Framework Core.
- NHibernate: Conversión de Hibernate en Java para lenguaje C# compatible con plataforma .Net. Estable. Open Source.
- Dapper: Micro-ORM que proporciona métodos de extensión a las clases de .Net Framework para mapear resultados y persistir datos, previa inyección de código SQL personalizado. No nos libera pues de la implementación de nuestro código SQL, actuando como simple mapeador, pero a cambio ofrece un buen rendimiento. Es un ORM creado y usado en producción por el conocido portal web Stack Overflow.