Introducción a ORMs

30
ORM: Object-Relational Mapping Grupo Azulejos

Transcript of Introducción a ORMs

Page 1: Introducción a ORMs

ORM: Object-Relational Mapping

Grupo Azulejos

Page 2: Introducción a ORMs

¿Qué es un ORM?

En el desarrollo de una aplicación suelen estar involucradas dos entidades diferentes, por una parte el código que mueve la aplicación y por otra los datos que se manejan (División en capas).Los sistemas de Mapeo Objeto-Relacional u ORM ayudan a hacer la transición de lenguaje orientado a objetos a la base de datos que se utilice.

Page 3: Introducción a ORMs

¿Qué es un ORM?

Permite ver y modificar los datos almacenados en una base de datos relacional usando el lenguaje de programación elegido y organiza las tablas o procedimientos almacenados en clases, por lo que en vez de utilizar consultas SQL para comunicarse con la base de datos se usan métodos y propiedades de objetos.

Page 4: Introducción a ORMs

¿Qué es un ORM?

La característica más importante de ORM es el mapeo.El mismo se usa para persistir objetos almacenados en una base de datos. Un objeto y sus propiedades están típicamente relacionados a una o más tablas y sus campos en la base de datos. El ORM usa la información de esta relación para gestionar el proceso de conversión de tablas a objetos y viceversa generando las consultas SQL necesarias para que la base de datos relacional gestione el CRUD de los objetos de dominio de la aplicación.

Page 5: Introducción a ORMs

Ventajas en el uso de ORMs.

Page 6: Introducción a ORMs

Algunos beneficios de usar un ORM.

● Se encarga de gestionar la conversión de tipos DATE y TIME en forma automática.

● Se encarga de hacer el trabajo “pesado” de asociar los valores de los campos de cada registro de una tabla en los respectivos atributos del objeto.

● Al brindar seguridad en diversos aspectos, previene ataques de inyección SQL.

● Para consultas complejas, muchos ORM brindan extensiones para escribir consultas en SQL nativo.

Page 7: Introducción a ORMs

Algunos beneficios de usar un ORM.

● Generación de código (Entities and Schemas).● Puede mejorar con creces la velocidad de desarrollo,

sobre todo cuando el esquema de la base de datos todavía no se encuentra maduro. Es muy tedioso reescribir una consulta SQL cada vez que se introduce una modificación en dicho esquema, lo cual conlleva a una pérdida de tiempo de producción.

● El uso de caché puede implicar velocidades de acceso a datos mucho mayores.

Page 8: Introducción a ORMs

Desventajas en el uso de ORMs.

Page 9: Introducción a ORMs

Algunas desventajas de usar un ORM.

● Se puede llegar a perder la noción acerca de cuánto tiempo se invierte retocando archivos XML o anotaciones, con el objetivo de optimizar la performance del ORM.

● Un mal uso de los sistemas ORMs (debido al desconocimiento del funcionamiento interno) puede reducir la performance de la aplicación en forma drástica. Todo depende del programador y la optimización en el uso del mismo.

Page 10: Introducción a ORMs

Algunas desventajas de usar un ORM.

● De por sí al agregar una capa más que se encarga abstraer al programador del acceso a los datos agregamos mayor complejidad con lo cual la latencia puede ser mayor.

Page 11: Introducción a ORMs

Cuándo SI utilizar ORMs.

Page 12: Introducción a ORMs

¿Cuándo utilizar un ORM?

● Para aplicaciones transaccionales (CRUD), en las que se realiza una petición, se buscan un conjunto de objetos en la BD, se los procesa y se renderiza una página web. La performance utilizando un ORM pueden ser mucho mejor si dichos objetos se encuentran en la caché del ORM.

Page 13: Introducción a ORMs

Cuándo NO utilizar ORMs.

Page 14: Introducción a ORMs

¿Cuándo NO utilizar un ORM?

● Para aplicaciones que requieren la generación de

reportes en los cuales intervienen un gran número de

registros por cada petición, el trabajo que lleva a cabo

el ORM no es eficiente debido a que puede saturar la

memoria de objetos.

Page 15: Introducción a ORMs

¿Cuándo NO utilizar un ORM?

● Los ORMs pueden ser optimizados para ser lo más eficientes posibles, y esto muchas veces es suficiente. Sin embargo en entornos donde se manejan un gran volumen de datos y que requieren de una baja latencia, los ORMs son un no rotundo.

Page 16: Introducción a ORMs

Opiniones a partir de las experiencias de diversos profesionales.

Page 17: Introducción a ORMs

Opiniones de Profesionales

● “En aplicaciones a gran escala, te encontrarás usando

ambos enfoques. ORM para llevar a cabo el CRUD y

una capa de acceso a datos fina de SQL para reportes.”

● “Para consultas complejas, realmente no hay sustitutos

para plain SQL. Existen algunas consultas en JPA que

no son posibles de llevar a cabo...”

Page 18: Introducción a ORMs

Opiniones de Profesionales

● “ORM no se trata sólo de portabilidad. Básicamente te

provee de una capa de abstracción de acceso a datos.

Un ORM libera al programador de escribir consultas

SQL y concentrar su atención en el dominio del

problema.”

● “Yo diría que SQL plano para reads (R), y ORM para

creates, updates y deletes (CUD).”

Page 19: Introducción a ORMs

Opiniones de Profesionales

● “En mi experiencia como desarrollador, he encontrado

que los ORM son útiles cuando hay que gestionar

transacciones (operaciones insert/update/delete), pero

cuando se trata de recolectar datos con resultados

complejos, resulta muy importante evaluar la

performance y la eficiencia de una herramienta ORM.”

Page 20: Introducción a ORMs

Opiniones de Profesionales

● “Si al usar un ORM no se obtiene ninguna ventaja real,

y la aplicación es muy sencilla, yo no usaría un ORM.

Un ejemplo claro es si la aplicación en cuestión se trata

acerca de procesar grandes conjuntos de registros y no

hay mucha lógica de negocio. Eso no significa que tu

aplicación no fuera diseñada de la manera apropiada,

pero, una vez más: Si usar un ORM no te brinda ningún

beneficio, entonces.. ¿Porque lo usarías?”

Page 21: Introducción a ORMs

Opiniones de Profesionales

● “Muchas veces es preferible un código que sea fácil de

mantener, sacrificando performance. En lo personal

creo que un código fácil de mantener es más

económico, ya que si la aplicación es escalable, el

costo del hardware asociado es menor al de

horas/hombre.”

Page 22: Introducción a ORMs

ORM más conocidos: Características y comparaciones.Ejemplos.

Page 23: Introducción a ORMs

Ejemplos

La mayoría de los ORM se fundan sobre las mismas bases e inclusive suelen trabajar de forma muy similar. Algunos ejemplos de ORMs son:● Hibernate (Java)● Entity Framework (.NET)● Doctrine (PHP)● SQLAlchemy (Python)● Active Record (Ruby)

Page 24: Introducción a ORMs

Algunas Características● Hibernate (Java) y SQLAlchemy (Python) se basan en

el patrón estructural DATA MAPPER.● Doctrine (PHP) y Active Record (Ruby) se basan en el

patrón estructural ActiveRecord.

Page 25: Introducción a ORMs

Algunas Características

● Todos ellos brindan soporte para:o Anotaciones/ XML para la definición del mapeo.o Transacciones.o Soporte para herencias y asociaciones entre clases.o Sus propios lenguajes de consulta (DQL, HQL, etc).o Caché (Doctrine PHP -> APC, Memcached, Xcache)o Consultas personalizadas (Doctrine QueryBuilder)

Page 26: Introducción a ORMs

HibernateHibernate es una herramienta de Mapeo objeto relacional (ORM) para la plataforma Java (y disponible también para .Net con el nombre de NHibernate) que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones.Hibernate ofrece también un lenguaje de consulta de datos llamado HQL (Hibernate Query Language), al mismo tiempo que una API para construir las consultas programáticamente (conocida como "criteria").

Page 27: Introducción a ORMs

ADO.NET - Entity FrameworkUna entidad del Entity Framework es un objeto que tiene una clave representando la clave primaria de una entidad lógica de datastore. Un modelo conceptual Entity Data Model (modelo Entidad Relación) es mapeado a un modelo de esquema de datastore. Usando el Entity Data Model, el Framework permite que los datos sean tratados como entidades independientemente de sus representaciones del datastore subyacente.

Page 28: Introducción a ORMs

ADO.NET - Entity FrameworkEl Entity SQL es un lenguaje similar al SQL para consultar el Entity Data Model (en vez del datastore subyacente). Similarmente, las extensiones del Linq, Linq to Entities, proporcionan consultas tipeadas en el Entity Data Model. Las consultas Entity SQL y Linq to Entities son convertidas internamente en un Canonical Query Tree que entonces es convertido en una consulta comprensible al datastore subyacente (ej. en SQL en el caso de una base de datos relacional). Las entidades pueden utilizar sus relaciones, y sus cambios enviados de regreso al datastore.

Page 29: Introducción a ORMs

Doctrine (PHP)Doctrine es un mapeador de objetos relacional (ORM) escrito en PHP que proporciona una capa de persistencia para objetos PHP. Es una capa de abstracción que se sitúa justo encima de un SGBD. Una característica de Doctrine es el bajo nivel de configuración que necesita para empezar un proyecto. Doctrine puede generar clases a partir de una base de datos existente y después el programador puede especificar relaciones y añadir funcionalidad extra a las clases autogeneradas.

Page 30: Introducción a ORMs

Doctrine (PHP)

No es necesario generar o mantener complejos esquemas XML de base de datos como en otros frameworks. Otra característica importante de Doctrine es la posibilidad de escribir consultas de base de datos utilizando un dialecto de SQL denominado DQL (Doctrine Query Language) que está inspirado en Hibernate (Java).