Cuando programamos, el uso de patrones de diseño esta a la orden del día. Dos de los patrones más utilizados en las aplicaciones son los patrones de persistencia y entre ellos destacan dos: Active Record y DAO.
Active Record
Este patrón de persistencia es quizás uno de los más habituales y es usado por frameworks como Rails. La idea detrás del patrón es bastante sencilla. Se trata de una clase que se encarga de implementar todas las operaciones de consulta y modificación de una tabla concreta de la base de datos.
De esta forma nuestra aplicación quedará completamente aislada del trabajo con SQL ya que delegará en la capa de componentes ActiveRecord para realizar todas las operaciones.
Este patrón de diseño en un primer momento parece suficiente para abordar la mayor parte de las problemáticas. Sin embargo hay situaciones en las que necesitamos algo más de flexibilidad y capacidad de adaptación. Para ello existe el patrón DAO o Data Access Object.
Data Access Object
Este patrón de diseño divide más las responsabilidades en la aplicación de tal forma que tendremos unas clases que se encargaran de la lógica de negocio y otras clases la responsabilidad de persistencia.
Aislamiento y Flexibilidad
A veces es difícil decidir que patrón de diseño elegir para nuestra casuística. Cuanto mayor flexibilidad necesitemos en la capa de persistencia más nos encajará el uso de un patrón DAO. Cuanto mas aislada este la aplicación y menos flexibilidad necesite más nos encajará un Active Record. Por poner un ejemplo sencillo imagenemos que el concepto de Factura es necesario para un módulo diferente de la aplicación que se encarga de imprimir PDFs con los datos de la Factura. En este caso no estamos en una situación de aislamiento sino en lo contrario. El módulo que se encarga de imprimir la factura trabajara de una forma más comoda con business objects sencillos que con Active Records. Por lo tanto es una casuística en la que encajará mejor el patrón DAO que el ActiveRecord.
Como vemos el Active Record tiene un conjunto de métodos que no vamos a utilizar ya que solo necesitamos los de un Business Object.
El patrón DAO encaja de una forma más natural en esta situación.