Registro activo | |
---|---|
registro activo | |
Descrito en Patrones de diseño | No |
El registro activo ( AR ) es un patrón de diseño de aplicaciones descrito por Martin Fowler en Patterns of Enterprise Application Architecture . AR es una forma popular de acceder a datos de bases de datos relacionales en programación orientada a objetos .
El esquema de Active Record es un enfoque para acceder a los datos en una base de datos. La tabla o vista de la base de datos está envuelta en clases. Por lo tanto, una instancia de objeto está vinculada a una sola fila en la tabla. Después de crear el objeto, se agregará una nueva fila a la tabla para guardar. Cualquier objeto cargado obtiene su información de la base de datos. Cuando se actualiza un objeto, también se actualizará la fila correspondiente en la tabla. La clase contenedora implementa métodos de acceso o propiedades para cada columna en una tabla o vista.
Este patrón es comúnmente utilizado por las herramientas de persistencia de objetos y en el mapeo relacional de objetos ( ORM ). Por lo general, las relaciones de clave externa se representarán como una instancia de objeto del tipo adecuado a través de una propiedad.
Las implementaciones de este patrón a menudo violan el Principio de responsabilidad única (SRP) al combinar tanto la representación como la lógica interna del propio objeto, así como los mecanismos CRUD en un solo objeto , por lo que Active Record puede considerarse un antipatrón [1] . En otros casos, esta afirmación es discutible, ya que el objeto en sí, que implementa ActiveRecord, no contiene ninguna lógica de negocios, pero proporciona una tabla de la base de datos, tiene una sola razón para cambiar (cambiar la tabla), que no contradice la definición del principio SRP [2 ] .
Que haya una tabla en la base de datos . Para esta tabla se crea una clase AR especial , que es un reflejo (representación) de la tabla, de tal forma que:
La implementación del concepto AR existe en muchos entornos de desarrollo para varios lenguajes de programación. Por ejemplo, si la base de datos tiene una tabla con partscampos name(tipo de cadena) y (tipo de número) price, y la plantilla de Active Record está implementada en la clase Part, entonces el siguiente pseudocódigo:
parte = nueva Parte() part.name = "Pieza de muestra" precio de pieza = 123,45 parte.guardar()creará un nuevo registro en la tabla partscon los valores dados y coincidirá aproximadamente con el comando SQL
INSERTAR EN piezas ( nombre , precio ) VALORES ( 'Pieza de muestra' , 123. 45 );Por otro lado, la clase se puede utilizar para consultar la base de datos:
b = Part.find_first("nombre", "caja de cambios")Este código creará una nueva instancia de la clase Partbasada en los datos del primer registro encontrado en la tabla partsque tiene un campo nameigual a "caja de cambios".
El comando SQL puede ser similar a uno de los siguientes, según la implementación de SQL en una base de datos en particular:
SELECT * FROM partes WHERE nombre = 'caja de cambios' LIMIT 1 ; -- MySQL o PostgreSQLo
SELECCIONE * DE partes DONDE nombre = 'caja de cambios' y número de fila < 2 ; -- Oráculoo
SELECCIONE TOP 1 * FROM partes DONDE nombre = 'caja de cambios' ; -- Servidor SQL de MicrosoftEjemplos de implementación: Yii [3] y Kohana para PHP . Cabe destacar el marco CodeIgniter , que tiene una clase ActiveRecord integrada que es un constructor de consultas de base de datos, pero no es un ejemplo de implementación del patrón Active Record.