domingo, 7 de julio de 2013

DATA ACCESS OBJECT (DAO)




Es bastante normal hacer aplicaciones que almacenan y recogen datos de una base de datos. Suele ser habitual, también, querer hacer nuestra aplicación lo más independiente posible de una base de datos concreta, de cómo se accede a los datos o incluso de si hay o no base de datos detrás. Nuestra aplicación debe conseguir los datos o ser capaz de guardarlos en algún sitio, pero no tiene por qué saber de dónde los está sacando o dónde se guardan.


Hay una forma de hacer esto que ha resultado bastante eficiente en el mundo JEE y de aplicaciones web, pero que es aplicable a cualquier tipo de aplicación que deba recoger datos de algún sitio y almacenarlos. Es lo que se conoce como patrón DAO (Data Access Object).


La idea de este patrón es sencilla. En primer lugar, debemos hacernos las clases que representan nuestros datos.


Con el permiso de los más puristas, un DAO no es otra cosa que un “adaptador” o un nexo entre la lógica de negocio y la capa de persistencia (generalmente, una Base de Datos). Lo que realiza este adaptador no es otra cosa que codificar la lógica de acceso a datos de una capa de persistencia en concreto.


 Estructura
La siguiente figura muestra el diagrama de clases que representa las relaciones para el patrón DAO:









  • Participantes y Responsabilidades



La siguiente figura muestra el diagrama de secuencia de la interacción entre los distintos participantes en este patrón:




BusinessObject


BusinessObject representa los datos del cliente. Es el objeto que requiere el acceso a la fuente de datos para obtener y almacenar datos. Podríamos implementar un BusinessObjectcomo un bean de sesión, un bean de entidad o cualquier otro objeto Java, además de como un Servlet o como un bean de apoyo.
DataAccessObject


DataAccessObject es el objeto principal de este patrón. DataAccessObject abstrae la implementación del acceso a datos subyacente al BusinessObject para permitirle un acceso transparente a la fuente de datos. El BusinessObject también delega las operaciones de carga y almacenamiento en el DataAccessObject.
DataSource


Representa la implementación de la fuente de datos. Una fuente de datos podría ser una base de datos como un RDBMS, un OODBMS, un repositorio XML, un fichero plano, etc. También lo pueden ser otros sitemas (mainframes/legales), servicios (servicio B2B u oficina de tarjetas de crédito), o algún tipo de repositorio (LDAP).
TransferObject


Representa un Transfer Object utilizado para el transporte de datos. DataAccessObjectpodría utilizar un Transfer Object para devolver los datos al cliente. El DataAccessObjecttambién podría recibir datos desde el cliente en un Transfer Object para actualizar los datos en la fuente de datos.





No hay comentarios:

Publicar un comentario