ActiveRecord es la razón realmente genial.

ActiveRecord abstrae la base de datos para que pueda manejar cualquier base de datos. Explora la fuerza y el valor de la abstracción.

bamchi 445

ActiveRecord es genial por una razón real: porque 'abstrae' la base de datos, podemos manejar cualquier base de datos.

En programación, el problema más difícil es manejar sistemas diferentes de manera consistente.

Las bases de datos son especialmente así.

  • MySQL tiene esta sintaxis

  • PostgreSQL tiene aquella sintaxis

  • SQLite es diferente

  • Oracle es un mundo completamente diferente

Para manejar todos estos directamente, los desarrolladores deben recordar constantemente la sintaxis de la base de datos, el dialecto SQL, las características de indexación, el sistema de tipos, el manejo de transacciones, etc.

Sin embargo, Rails resolvió todos estos problemas con una sola capa llamada ActiveRecord.

Esto es precisamente la abstracción.


¿Qué es la abstracción? (Concepto en sí mismo, sin metáforas)

La esencia de la abstracción es simple.

Unificar sistemas complejos en una única interfaz común (API).

Es decir, aunque los métodos de funcionamiento sean diversos, se los hace funcionar de una manera unificada.

La abstracción es una de las técnicas más poderosas en el mundo de la ingeniería.


¿Qué abstrajo ActiveRecord?

Hay una sola respuesta.

Unificó la sintaxis y el funcionamiento SQL únicos de cada base de datos en manipulaciones de objetos Ruby.

En otras palabras,

Cambió "diferentes mundos de bases de datos" a "un único mundo de código Ruby".


¿Qué tan poderoso es esto? Demostremos con un ejemplo.

Por ejemplo, digamos que queremos obtener una lista de usuarios.

Si usamos SQL directamente:

MySQL

SELECT * FROM `users` ORDER BY `created_at` DESC LIMIT 10;

PostgreSQL

SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

Oracle

SELECT * FROM users WHERE ROWNUM <= 10 ORDER BY created_at DESC;

Las sintaxis son diferentes.
LIMIT es diferente, las reglas de consulta son diferentes, las palabras clave son diferentes.

Pero, si usamos ActiveRecord?

Rails

User.order(created_at: :desc).limit(10)

Listo.

ActiveRecord, basado en este solo código Ruby,
convierte automáticamente a SQL específico de cada base de datos.

  • Si es MySQL, SQL personalizado de MySQL

  • Si es PostgreSQL, SQL personalizado de PostgreSQL

  • Si es SQLite, SQL personalizado de SQLite

Es decir, el desarrollador solo necesita saber Ruby.


El valor real que ofrece la abstracción

Los beneficios obtenidos por ActiveRecord a través de la abstracción son los siguientes.


1) Cambiar de base de datos es libre

Por ejemplo, cambiemos de SQLite a PostgreSQL.

Normalmente:

  • Modificar todas las SQL

  • Cambiar todos los tipos

  • Modificar todos los manejos de transacciones

  • Modificar todas las sintaxis de LIMIT/OFFSET

Pero en Rails...
No es necesario cambiar nada.

Solo cambia el adaptador en la configuración de Rails.

adaptador: postgresql

El código sigue igual:

User.where(active: true)

Y esto funciona correctamente.


2) Puedes desarrollar sin conocer la base de datos

ActiveRecord maneja automáticamente lo siguiente:

  • Almacenamiento de datos

  • Modificación

  • Consultas

  • Eliminación

  • Transacciones

  • Configuración de relaciones

  • Manejo de claves foráneas

  • Optimización de JOIN

El desarrollador solo necesita hacer esto.

usuario = User.find(5)
usuario.update(name: "Nuevo Nombre")

Pero en realidad, internamente en la base de datos,
se ejecutan SQL complejos automáticamente:

UPDATE users SET name = 'Nuevo Nombre' WHERE id = 5;

El desarrollador no necesita saber esto.


3) Permite un pensamiento centrado en el modelo (Model-driven Thinking)

SQL es un pensamiento centrado en los datos.
Pero Rails es un pensamiento centrado en los objetos.

Es decir, tratamos el modelo de usuario como un objeto real.

usuario.posts

Esta única línea maneja
JOIN, WHERE, INDEX, interpretación de relaciones...
todo.

Gracias a ActiveRecord,
el desarrollador puede concentrarse en diseñar la lógica del negocio.


En el momento en que entiendes la abstracción, ActiveRecord parece increíblemente genial

Mira el siguiente código Ruby.

usuarios = User.where("edad > ?", 18).order(:created_at)

Cuando se ejecuta este código, internamente:

  1. Se examina la estructura del modelo

  2. Se verifica el tipo de base de datos

  3. Se escapan de manera segura las condiciones WHERE

  4. Se aplica el orden

  5. Se convierte en la sintaxis SQL que entiende la base de datos correspondiente

  6. Se ejecuta el SQL

  7. Los valores devueltos se convierten en objetos Ruby (User) en lugar de registros

Todo este proceso no necesita ser consciente para el desarrollador.

Es decir,

ActiveRecord = Una herramienta que convierte completamente el mundo de la base de datos en el mundo Ruby para el desarrollador

Gracias a esta abstracción,
los desarrolladores de Rails
pueden manejar todos los datos de un servicio completo
sin ser expertos en bases de datos,
solo con unas pocas líneas de Ruby.


Conclusión: ActiveRecord no es un ORM, es un 'motor de abstracción de base de datos'

¿Por qué ActiveRecord es un "tipo realmente genial"?

La razón es una sola.

ActiveRecord hace que los desarrolladores olviden por completo la complejidad y las reglas diferentes de cada base de datos.
Y permite manejar todos los tipos de bases de datos de la misma manera con un único lenguaje, Ruby.

Esta es la fuerza de la abstracción.
Esta es la filosofía de Rails.
Esta es la respuesta a por qué ActiveRecord es un ORM de nivel superior.

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Sigue leyendo

Get notified of new posts

We'll email you when Bamchi Blog publishes new content.

Your email will only be used for new post notifications.