En la ingeniería de software , algunas personas consideran el patrón de registro activo como un patrón arquitectónico y recientemente otros lo consideran un anti-patrón . [1] [2] Se encuentra en software que almacena datos de objetos en memoria en bases de datos relacionales . Fue nombrado por Martin Fowler en su libro de 2003 Patterns of Enterprise Application Architecture . [3] [4] La interfaz de un objeto que se ajuste a este patrón incluiría funciones como Insertar, Actualizar y Eliminar, además de propiedades que corresponden más o menos directamente a las columnas de la tabla de la base de datos subyacente.
El patrón de registro activo es un método para acceder a los datos en una base de datos . Una tabla o vista de base de datos se incluye en una clase . Por lo tanto, una instancia de objeto está vinculada a una sola fila en la tabla. Después de la creación de un objeto, se agrega una nueva fila a la tabla al guardar. Cualquier objeto cargado obtiene su información de la base de datos. Cuando se actualiza un objeto, también se actualiza la fila correspondiente en la tabla. La clase contenedora implementa métodos de acceso o propiedades para cada columna de la 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). Normalmente, las relaciones de clave externa se expondrán como una instancia de objeto del tipo apropiado a través de una propiedad.
Implementaciones
Las implementaciones del concepto se pueden encontrar en varios marcos para muchos entornos de programación. Por ejemplo, si hay una tabla parts
en una base de datos con columnas name
(tipo de cadena) y price
(tipo de número), y el patrón de registro activo está implementado en la clase Part
, el pseudocódigo
parte = nueva parte ()part.name = "Pieza de muestra"part.price = 123,45part.save ()
creará una nueva fila en la parts
tabla con los valores dados, y es aproximadamente equivalente al comando SQL
INSERT INTO partes ( nombre , precio ) VALORES ( 'parte de muestra' , 123 . 45 );
Por el contrario, la clase se puede utilizar para consultar la base de datos:
b = Part.find_first ("nombre", "caja de cambios")
Esto encontrará un nuevo Part
objeto basado en la primera fila coincidente de la parts
tabla cuya name
columna tiene el valor "caja de cambios". El comando SQL utilizado puede ser similar al siguiente, según los detalles de implementación de SQL de la base de datos:
SELECCIONAR * DE las partes DONDE nombre = 'caja de cambios' LÍMITE 1 ; - MySQL o PostgreSQL
Crítica
Testabilidad
Debido al acoplamiento de la interacción de la base de datos y la lógica de la aplicación cuando se usa el patrón de registro activo, la prueba unitaria de un objeto de registro activo sin una base de datos se vuelve difícil. Estos efectos negativos sobre la capacidad de prueba del patrón de registro activo se pueden reducir mediante el uso de marcos de inyección de dependencia o de burla para sustituir el nivel de datos reales por uno simulado.
Principio de responsabilidad única y separación de preocupaciones
Otra crítica del patrón de registro activo es que, también debido al fuerte acoplamiento de la interacción de la base de datos y la lógica de la aplicación, un objeto de registro activo no sigue el principio de responsabilidad única y separación de preocupaciones en oposición a la arquitectura de múltiples niveles que aborda adecuadamente estas prácticas. [ cita requerida ] [ aclaración necesaria ] Debido a esto, el patrón de registro activo es mejor y más a menudo empleado en aplicaciones simples que son todos formularios sobre datos con funcionalidad CRUD , o solo como una parte de una arquitectura. [ cita requerida ] Por lo general, esa parte es el acceso a los datos y por qué varios ORM implementan el patrón de registro activo.
Sistemas distribuidos
Los patrones basados en registros funcionan mal en sistemas distribuidos, especialmente donde la concurrencia es imposible (por ejemplo, sin conexión). es decir, dos actualizaciones, ambas pueden tener un campo que sea correcto, pero solo uno de los dos registros puede ganar. [ aclaración necesaria ]
Ver también
- Objeto comercial
- CRUD - Operaciones básicas de una base de datos informática
- Patrón de mapeador de datos
- Mapeo relacional de objetos
Referencias
- ^ Antipattern: el modelo es un registro activo
- ^ Antipatrones ORM - Parte 1: Registro activo
- ^ P del catálogo EAA - Registro activo
- ^ Fowler, Martin (2003). Patrones de arquitectura de aplicaciones empresariales . Addison-Wesley. ISBN 978-0-321-12742-6.