Patrón Active Record

Active Record es un patrón de diseño el cual permite crear un objeto que "envuelve" una tabla SQL, agregándole la lógica del modelo y el control de acceso. Este patrón de diseño permite unir el mundo de la programación orientada a objetos (POO), que es un mundo intuitivo y "natural", con el mundo matemático y rígido de los datos relacionales (SQL). Usar POO y SQL dentro de una aplicación es como si un arquitecto quisiese usar dos tipos totalmente diferentes de materiales (con propiedades y pesos diferentes) en una misma estructura: la mezcla sería una gran y continua molestia al momento de diseñar los espacios, calcular los pesos y las distancias.

Active Record fue propuesto por Ruby on Rails (Ruby es el lenguaje de programación y Rails el framework para realizar aplicaciones web con Ruby) donde su objetivo principal es proporcionar una capa objeto-relacional que siga rigurosamente el estándar ORM (object-relational mapping): Tablas en Clases, Campos en Atributos y Registros en Objetos. Este patrón facilita el entendimiento del código asociado a base de datos y encapsula la lógica especifica haciéndola más fácil de usar para el programador.

Otra aproximación para salvar la división Relacional-Objetual es usar un ORM (object-relational mapping), que son archivos XML o formato YAML que mapean las tablas y crean objetos manipulables. Propel o Doctrine son ORMs para PHP que usan esta aproximación. Sin embargo estos métodos son más engorrosos (generalmente hay que crear los ficheros a mano), por ello la mayoría de los frameworks como CakePHP o Ruby on Rails usan ActiveRecord.

Cuando se modifican los atributos del objeto, se actualiza la fila de la base de datos. La clase envuelve-implementa métodos de acceso para cada columna de la tabla o vista. Por ejemplo, si existe una tabla llamada libros con las columnas id, titulo y precio (de tipo moneda o flotante) y existe la clase Libro, el siguiente código:

<?php
   $libro = new Libro();
   $libro->titulo = 'El resplandor';
   $libro->precio = 22.45;
   $libro->save();
?>

creará una nueva fila en la base de datos con los valores proporcionados, que viene a ser más o menos equivalente a la siguiente sentencia en SQL:

INSERT INTO libros (titulo, precio) VALUES ('El resplandor', 22.40);

Al aplicar el método **save()**, si el registro no está en base de datos lo insertará, sino lo actualizará.

CodeIgniter nos proporciona una versión simplificada del Patrón **Active Record** de base de datos. Este patrón nos permite que el código SQL utilizado para obtener, insertar, o actualizar en base de datos sea mínimo. En algunos casos, sólo serán necesarias una o dos líneas de código para realizar una acción de base de datos. CodeIgniter no requiere que cada tabla de base de datos tenga su propia Clase lo que nos proporciona una interfaz de acceso mucho más simplificado.

Más allá de la simplicidad, una ventaja principal de la utilización de Active Record es que nos permite abstraernos de la base de datos utilizada, ya que la sintaxis SQL es generada por cada driver de base de datos. Esto también nos permite realizar consultas mucho más seguras, ya que los valores son escapados automáticamente por el sistema.

Algunos ejemplos de uso del patrón Active Record en CodeIgniter:

$query = $this->db->get('libros');

En la variable $query tendremos un objeto que apunta a una tupla de resultados y tendremos que recorrerla con un foreach o while devolviendo un array con todos los libros almacenados.

foreach ($query->result_array() as $libro)
   $libros[] = $libro;

results matching ""

    No results matching ""