Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
December 24, 2021 12:53 am GMT

ORMs - Active Record & Data Mapper

Cul es la diferencia entre Active Record y Data Mapper?

Cuando trabajamos con datos en una aplicacin, probablemente necesitemos un ORM (Object Relational Mapping). Un ORM es la capa entre la base de datos y nuestra aplicacin. Al usar un ORM, la mayora del trabajo de crear, actualizar, leer y eliminar de la base de datos es hecho por este ORM.

La mayora de los frameworks actuales estn preparados para trabajar con un ORM sin problemas. Por ejemplo, Laravel trabaja normalmente con Eloquent.

Las dos ms famosas implementaciones de ORMs son Active Record y Data Mapper. En este artculo vamos a explorar la diferencia entre estos dos patrones, cuales son los beneficios y desventajas de elegir uno u otro.

Qu es un ORM y por qu necesitamos uno?

Antes de comenzar a hablar acerca de las diferencias entre Active Record y Data Mapper, vamos a hablar un poco sobre qu es un ORM y cul es su utilidad.

Como dijimos anteriormente, un ORM es la capa que existe entre la base de datos y nuestra aplicacin. En POO, trabajamos con objetos como nuestro principal punto de referencia.

Por ejemplo, podramos tener el siguiente objeto:

user = new User();user.name = "Elodin";

Sin embargo, las bases de datos pueden almacenar valores como strings o integers.

Image description

Un User podra tener varios posteos en nuestra aplicacin. Para conseguirlos, podramos hacer algo as:

posts = user.posts;

Sin embargo, en la base de datos, los posteos estaran almacenados en un tabla, as:

Image description

Cuando trabajamos con objetos en nuestra aplicacin, trabajamos con objetos simples que almacenan todas sus propiedades y relaciones.

No obstante, estos datos son almacenados individualmente en las diferentes tablas de la base de datos.

Un ORM es esa capa "mgica" que transforma los datos en forma de objetos en datos relacionales que pueden ser guardados en la base de datos y viceversa.

Qu es el patrn Active Record?

Este patrn de ORMs es probablemente el ms popular.

Un ejemplo de uso tpico sera el siguiente:

user = new User();user.name = "Elodin";user.save();

En el ejemplo de arriba creamos un nuevo objeto User, configurando el username y luego guardando el objeto en la base de datos.

ORMs del estilo Active Record mapean un objeto con una fila de la base de datos. En el ejemplo anterior, estaramos mapeando el objeto User a una fila en la tabla users.

Cuando abramos el archivo de modelo User, notaremos que no necesitamos especificar las propiedades del objeto o como se relaciona con la base de datos. Con este tipo de ORMs, el modelo es capaz de determinar las propiedades del modelo automticamente tomando como referencia el esquema de la base de datos.

Uno de los beneficios de este estilo de ORMs es que podemos llamar al mtodo save() en el objeto para actualizar la base de datos. Cada modelo hereda de un objeto base (del patrn Active Record) por lo que tenemos acceso a todos los mtodos relacionados a la presistencia de datos. Esto hace que comenzar a trabajar con ORMs de estilo Active Record sea muy fcil ya que son muy intuitivos.

Qu es el patrn Data Mapper?

La gran diferencia entre ambos patrones es que el Data Mapper separa completamente el dominio de nuestra aplicacin y la capa de persistencia. Esto significa que ninguno de nuestros modelos (objetos) sabe nada acerca de la base de datos.

Cuando usamos el patrn Data Mapper nuestro cdigo lucira algo as:

user = new User();user.username = "Elodin";

Hasta ahora, no hay diferencias con el patrn Active Record.

No obstante, los objetos del modelo Data Mapper no son ms que objetos que no tienen conocimiento alguno sobre la base de datos. Esto significa que no podemos llamar al mtodo save() en el objeto a almacenar porque este mtodo no existe en este objeto.

En cambio, necesitaremos usar un servicio completamente diferente, por ejemplo, llamado Entity Manager:

user = new User();user.username = "Elodin";EntityManager.persist(user);

El gran beneficio del patrn Data Mapper es que los objetos que utilizamos en el dominio de nuestra aplicacin no necesitan conocer nada acerca de cmo estn guardados en la base de datos. Esto significa que nuestros objetos sern ms livianos ya que no debern heredar el ORM completo, sino que tambin habr un proceso ms estricto y formal para interactuar con la base de datos debido a que no podremos llamar al mtodo save() en cualquier lugar en nuestro cdigo.

Entonces, cules son las diferencias entre Active Record y Data Mapper?

Ambos patrones tienen aspectos positivos y negativos, por supuesto. Como ocurre con casi todo lo dems en el mbito de la programacin, no hay uno que sea mejor que otro, sino que... depende.

Con todo esto en mente, puede haber dos formas de juzgar cul patrn nos conviene ms usar en nuestro caso.

El tipo de aplicacin que estemos construyendo

Generalmente y a grandes rasgos, existen dos tipos de aplicaciones: aquellas basadas en los mtodos CRUD y las basadas en el propio dominio de la aplicacin.

En una aplicacin basada en los mtodos CRUD tpicamente estaremos creando, leyendo, actualizando y eliminando entidades. Tambin, puede que tengamos relaciones entre nuestros modelos, pero sobre todo, no hay reglas estrictas respecto a cmo estas relaciones estn dadas.

Cuando construimos una aplicacin que est basada o pensada desde el lado de la base de datos, la solucon ms ptima es el patrn Active Record. ste ltimo, nos permitir rpida y fcilmente levantar y correr nuestra aplicacin.

Si por el contrario, nuestra aplicacin es construida pensando en satisfacer las reglas y procedimientos de un negocio, el patrn Data Mapper puede que sea la mejor opcin. ste patrn har cumplir ciertas restricciones de tratar con datos y su persistencia, y tambin nos permitir encapsular esas reglas de negocio dentro de las entidades.

La aplicacin y el entorno en el que est siendo construida

Si estamos construyendo un MVP (Producto Mnimo Viable) para testear un nuevo mercado, puede que tenga ms sentido usar el patrn Active Record. Al principio, generalmente no sabemos del todo cuales reglas del negocio sern ms importantes, y nunca lo sabremos si nos obsesionamos con la arquitectura de nuestra aplicacin.

Por otro lado, si la idea es trabajar en una aplicacin para un negocio ya existente, puede que sea mejor idea usar un patrn Data Mapper. Un negocio existente ya tendr reglas y procedimientos por medio de los cuales funciona. Si usramos un patrn Active Record terminaramos intentando forzar estas reglas del negocio para que se adapten a nuestra idea de una aplicacin pensada desde el lado de la base de datos. El patrn Data Mapper nos permitir encapsular las reglas de dominio del negocio permitindonos trabajar de manera intuitiva y clara.

Nota

Este artculo ha sido ma que nada teora sin muchos ejemplos prcticos. Para ver un tutorial prctico sobre las diferencias entre estos dos patrones, el siguiente enlace ser de utilidad => How We Code: ORMs and Anemic Domain Models by Chris Fidao.

Fuente: https://www.culttt.com/2014/06/18/whats-difference-active-record-data-mapper


Original Link: https://dev.to/agustintosco/orms-active-record-data-mapper-4mpm

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To