2011-07-10 46 views
17

¿Cuál es la diferencia entre un objeto de acceso a datos y un registro activo? Parecen ser lo mismo, ya que ambos construyeron una capa entre la aplicación y la capa de persistencia, y abstraen el acceso directo a la base de datos utilizando consultas SQL.Diferencia entre Active Record y DAO?

Respuesta

17

Objeto de acceso a datos (DAO) se refiere a un objeto en su capa de datos responsable de persistir una entidad separada en su dominio. Active Record es híbrido cuando la clase que contiene los valores de una sola fila de una tabla también es responsable de las consultas, actualizaciones, inserciones y eliminaciones de esa tabla. El patrón de diseño Active Record significa que su objeto tiene una asignación de uno a uno con una tabla en su base de datos.

18

A Objeto de acceso a datos (DAO) es una interfaz dedicada a la persistencia de un objeto de modelo/dominio a una fuente de datos, y no a cualquier objeto en la capa de datos. Aquí hay un reference.

El patrón ActiveRecord funciona de manera similar, pero coloca los métodos de persistencia en el objeto modelo en sí, mientras que el DAO define una interfaz discreta. La ventaja del patrón DAO es:

  • Su fácil de definir otro estilo de persistencia, por ejemplo, pasar de una base de datos a la nube, sin cambiar la impelementation subyacente, mientras que la interfaz externa sigue siendo la misma, por lo tanto no afecta a otra clases

  • Las preocupaciones de persistencia están moduladas lejos de las preocupaciones principales del objeto modelo.

La ventaja del patrón ActiveRecord es la simplicidad.

+0

Creo que su primera viñeta es inexacta. Tal vez en algunas implementaciones, pero en otros es completamente posible cambiar el mecanismo de persistencia (incluso en tiempo de ejecución) relacióndb, archivo plano o servicio web sin cambiar la interfaz ... especialmente si esa interfaz está bien diseñada (es decir, es solo crear, leer , actualizar, eliminar). La diferencia es que (una vez más, dependiendo de la implementación ... ya que estos rasgos se pueden mezclar con muchos idiomas ...) – Mainguy

+0

@Mainguy Sí, si el lenguaje proporciona mezclas sin esfuerzo y dinámicas (no estáticas) se podrían cumplir los objetivos DAO ya por ActiveRecord. –

Cuestiones relacionadas