¿Cuál es el propósito de Active Records?
-
05-07-2019 - |
Pregunta
Estoy jugando con CodeIgniter y he encontrado Active Records por primera vez. Al principio lo descarté como algo para personas que realmente no saben cómo escribir SQL. Ahora me doy cuenta de que mi análisis fue defectuoso y los registros activos son bastante prominentes, especialmente en Rails.
¿Pero qué propósito tienen los Registros Activos? Es para abstraerse de las diferentes individualidades RDBMS. Si es así, pensé que no es eso lo que SQL debe hacer. Además, ¿qué es la mejor práctica? ¿Debo usar estos?
Gracias de antemano
Solución
El " Patrón de registro activo " se está convirtiendo en una parte central de la mayoría de los marcos de programación. Facilita las tareas de CRUD (Crear, Actualizar, Leer, Eliminar) más sencillas. Por ejemplo, en lugar de tener que escribir muchos SQL para insertar, actualizar y eliminar muchos objetos de datos comunes y simples, le permite simplemente asignar los valores al objeto de datos y ejecutar un comando, por ejemplo. $ object- > save (), el SQL se compila y ejecuta para usted.
La mayoría de los marcos también implementan relaciones de datos dentro de sus respectivos modelos de Registro Activo que pueden simplificar enormemente el acceso a los datos relacionados con su objeto. Por ejemplo, en CodeIgniter, si especificó que una Categoría " tiene muchas " Luego, después de cargar el objeto Categoría desde la base de datos, puede enumerar sus productos secundarios con una simple línea de código.
foreach ($category->products as $product) {
echo $product->name;
}
Otro beneficio de Active Record es, como usted dice, que hace que su código sea fácilmente transportable a diferentes plataformas de bases de datos (siempre que el marco que está utilizando tenga un controlador para su base de datos elegida) y aunque no es probable Parece importante en este momento, ¡puede que tenga un mayor valor en una fecha posterior si su aplicación se vuelve popular!
Esperemos que esto haya ayudado. Wikipedia describe bien el Registro Activo ( http://en.wikipedia.org/wiki/Active_record_pattern ) y los documentos CodeIgniter también lo harán. Personalmente, uso KohanaPHP ( http://www.kohanaphp.com ) que es una bifurcación única de PHP5 de CodeIgniter y Me parece que los modelos ORM son muy útiles.
Otros consejos
Registro activo es un patrón de diseño para el acceso a datos ...
En este momento hay dos patrones de diseño principales que me parecen ver con respecto al acceso a datos: ActiveRecord y el patrón de repositorio
Registro activo
Sus objetos contienen métodos para mantener su estado en una base de datos (u otro mecanismo de persistencia), por lo que:
Es posible que tenga un objeto de cliente.
El objeto Customer tendrá un montón de métodos como Customer.Save () ;, Customer.Get (int id); y otros.
Estos métodos realmente no tienen nada que ver con un cliente en el mundo real. Realmente se trata de la infraestructura de su aplicación.
Patrón de repositorio
En el patrón de repositorio, su objeto de cliente sería un POCO u objeto tonto. Solo tiene métodos y propiedades que realmente necesita para representar a un cliente (por ejemplo, nombre, dirección de correo electrónico, lista de pedidos, etc.)
Cuando quiera persuadir al cliente, simplemente se lo pasa a su repositorio
Repository.Save (MyCustomer).
El patrón de grabación activo es rápido y fácil de trabajar. Desafortunadamente, esto desordena su modelo de dominio con estos métodos que realmente no tienen nada que ver con un Cliente. Esto hace que sea un poco más difícil mantener su modelo de dominio a lo largo del tiempo.
Para muchas situaciones, es muy apropiado usar un patrón de registro activo. Por ejemplo, si escribo una aplicación bastante simple que probablemente no cambie mucho, probablemente inicie SubSonic y genere un DAL de registro activo. Estaría codificando el código de mi negocio en 20 minutos y todo el material de DB ya está resuelto.
Si, por otro lado, estoy modelando un dominio particularmente complejo, con alta susceptibilidad de cambiar, prefiero mantener los modelos de mi dominio limpios e implementar un patrón de repositorio con nHibernar o similar ...
Hace mucho tiempo que no uso mi propio acceso a datos usando ADO.Net, y realmente no lo recomiendo ahora que hay muchas herramientas excelentes de acceso a datos disponibles.
Podría dar mi propia opinión sobre este patrón, pero la mejor cobertura de Active Record (y muchas otras) es Patterns de Enterprise Application Architecture por Martin Fowler.
Del capítulo 10:
Registro activo
Un objeto que envuelve una fila en un Vista de tabla o base de datos, encapsulados El acceso a la base de datos, y añade dominio. lógica sobre esos datos.
Un objeto transporta datos y comportamiento. Gran parte de esta información es persistente y necesita ser almacenado en una base de datos. Active Record utiliza más enfoque obvio, poniendo acceso a los datos Lógica en el objeto de dominio. De esta manera Todas las personas saben leer y escribir. sus datos hacia y desde la base de datos.
...
Cuándo usarlo
Active Record es una buena opción para la lógica de dominio que no es demasiado complejo, como crea, lee, Actualiza, y elimina. Derivaciones y validaciones basadas en un solo registro funciona bien en esta estructura.
...
Active Record tiene el primario Ventaja de la simplicidad. Es fácil de construir registros activos, y son fácil de entender. Su primaria El problema es que funcionan bien solo si los objetos Active Record corresponden directamente a las tablas de la base de datos: una esquema isomorfo
Si su negocio la lógica es compleja, pronto querrás usa el objeto directamente relaciones, colecciones, herencia, y así sucesivamente. Estos no mapear fácilmente en Active Record, y Agregarlos poco a poco se vuelve muy desordenado. Eso es lo que te llevará a utilizar Data. Asignador en su lugar
En todo caso, facilita la escritura de consultas. Me parece que la sintaxis normal de MySQL es propensa a errores de sintaxis (no es mi culpa) y con la sintaxis de registro activo de CI esto rara vez me sucede.
Active Record es una de las funciones más geniales de IM IMHO
Active Record es un ORM. ¿Ha echado un vistazo a la técnica de mapeo de relación de objetos? Creo que si entiendes ORM, comenzarás a ver los beneficios.