Registro activo

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 25 de septiembre de 2019; las comprobaciones requieren 3 ediciones .
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 ] .

Principio general de funcionamiento del Registro Activo

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:

Implementación

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 PostgreSQL

o

SELECCIONE * DE partes DONDE nombre = 'caja de cambios' y número de fila < 2 ; -- Oráculo

o

SELECCIONE TOP 1 * FROM partes DONDE nombre = 'caja de cambios' ; -- Servidor SQL de Microsoft

Ejemplos 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.

Véase también

Notas

  1. Pablo's SOLID Software Development 8. - "Un buen anti-ejemplo es el patrón Active Record". Este patrón está en contradicción con SRP. Una entidad de dominio maneja la persistencia de su información. (Nota: no hay nada de malo en usar Active Record; recientemente lo usé en un sitio de demostración rápida y funcionó perfectamente) Normalmente, tendría un método/acción de controlador que pasaría una entidad "hidratada" a un método de un repositorio instancia." Consultado el 31 de julio de 2017. Archivado desde el original el 29 de agosto de 2017.
  2. Serguéi Protko (fesor). AR, por definición, lo viola y está diseñado para violarlo.  // https://habrahabr.ru/.+ Archivado el 31 de julio de 2017.
  3. Ejemplo de uso de Active Record en el marco Yii. Archivado el 10 de febrero de 2010 en Wayback Machine . Archivado el 10 de febrero de 2010.

Enlaces