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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top