Вы находитесь на странице: 1из 5

DAO: Data Access Object

 Contexto
El acceso a los datos varía dependiendo del origen de los mismos. El acceso al almacén persistente varía dependiendo del tipo de almacén ( RDBMS,
OODBMS, archivos planos y otros) y del vendedor que lo implementa.

 Problema

La mayoría de aplicaciones J2EE necesita utilizar data persistente en algún momento. Para las aplicaciones, el almacén persistente es implementado
con mecanismos diferentes y hay marcadas diferencias en las API’s utilizadas para acceder a estos distintos mecanismos. Otras aplicaciones podrían
necesitar acceder a datos que residen en sistemas diferentes. Por ejemplo, en un mainframe, en un repositorio LDAP, un servicio B2B, bureau de tarjetas
de crédito y otros.

Típicamente, las aplicaciones utilizan componentes distribuidos compartidos persistentes como los entity beans para representar la data persistente. Una
aplicación es considerada que empleará un bean managed persistence para sus entity beans cuando estas entity beans explícitamente accesen al
almacén persistente, es decir, cuando el entity bean incluya código para acceder directamente al almacén persistente. Una aplicación con requerimientos
simples no utilizaría entity beans y en vez de ellos utilizaría session beans o servlets para acceder directamente al almacén persistente para recuperar y
modificar datos.

Las aplicaciones pueden usar la API-JDBC para acceder a los datos que residen en un RDBMS. Esta APU permite el acceso estandar y la manipulación
de datos en un almacén persistente como una base de datos relacional. JDBC permite a las aplicaciones J2EE utilizar sentencias SQL estándar. Sin
embargo las sentencias SQL podrían varias dependiendo del DBMS.

 Estrategias:

Automatic DAO Code Generation Tools


En vista de que cada Objeto del Negocio corresponde a un objeto DAO específico, es posible establecer relaciones entre el objeto de negocio, el
DAO y la implementación( ejm: tablas en un RDBMS). Una vez que estas relaciones son establecidas es posible utilizar un utilitario para generar
código de una aplicación simple para cualquier DAO requerido.

Factory for Data Access Object


El patrón DAO puede ser más flexible adoptando los patrones Abstract Factory y Factory Metod. Esta estrategia le permite construir varios tipos de DAO
factories, cada uno soportando un tipo diferente de almacén persistente. Una vez que se obtenga el DAO Factory para una implementación específica,
se usará para producir DAOs soportados e implementados como por ejmplo ClienteDAO, CuentaDAO o MySQLUsuarioDAO.
 Solución:
Use un DAO para abstraer y encapsular todos los accesos a la fuente de datos. DAO administra la conexión con la fuente de datos para obtener y
almacenar los datos.

El Objeto de Acceso a Datos (DAO) es el objeto principal de este patrón. La fuente de datos podría ser un almacén persistente como un RDBMS, un
servicio externo como B2B, un servicio de negocios accesado via CORBA . Los componentes del negocio que cuentan con los objetos DAO utilizan una
interface simple expuesta por el DAO para sus clientes. El DAO completamente oculta la implementación de la fuente de datos y lo aparta de los clientes,
debido a que la interface expuesta por el DAO no cambia cuando la implementación de la fuente de datos cambia. Este patrón permite al DAO adaptarse
a diferentes esquemas de almacenamiento sin afectar a sus cliente o componentes de negocio. DAO esencialmente actúa como un adaptador entre el
componente de negocio y la fuente de datos(data source).

Estructura:
D AOFactory
login.jsp_Client (from dao)
(from login.jsp) MYSQL : int = 1

HS +objDAOFactory
ORACLE : int = 2
DB2 : int = 3
SQLSERVER : int = 4
XML : int = 5
<<post>>
getUsuarioDAO()
ServletLogin
getProductoDAO()
(from se rvl e ts) getDAOFactory()

doPos t( )
Form
(from l ogin.j sp_Cli ent)
MySqlDAOFactory Oracle DAOFactory
<<H TML Input>> usuario : text (from dao) (from dao)
<<HTML Input>> clave : password
DRIVER : String = "com.mysql.jdb c.Driver" DRIVER : String = ""
<<HTML Input>> cboEnviar : submit = Enviar
DBU RL : String = "jdbc:mysql://localhost:3306/demodb" DBURL : String = ""
<<H TML Input>> btnLimpiar : reset = Limpiar
createC onnection( ) createConnection()
getU suarioDAO() getUsuarioDAO()
getPro ductoDAO() getProductoDAO()

MySqlU suari oDAO


(from dao)

+objUsuarioDAO validarUsuario()
cambiarClave() MySqlDBC onn
actualizar() +cnx (from util )
eliminar()
UsuarioDAO getConnection() getConnection()
insertar()
(from dao)
obtenerUsuarioPK()
obtenerUsuarios()
validarUsuario() obtenerUsuariosxTipo()
cambiarC lave() Lista
actualizar() (from util)
eliminar() +objBeanUsuario
lista : ArrayList = new ArrayList ()
i nsertar() anterior : boolean
obtenerUsuarioPK() BeanUsuario
disponible : int
obtenerUsuarios() (from beans)
numPagina : int
obtenerUsuariosxTi po() login : String
siguiente : boolean
password : String
tamPagina : int
nombre : String
tipoUsuario : String +objBeanU suari o
+objLista eliminarElemento()
eliminarElemento()
getLogin()
existeElemento()
getNombre()
getDisponible()
getPassword() getNumeroElementos()
getTipoUsuario() getElemento()
setLogin()
getElemento()
setNombre()
getFirstElementPage()
setPassword()
getLastElementPage()
setTipoUsuario()
getNextPage()
getNumPagina()
getPrevPage()
getTamanio()
getTamPagina()
Init()
isAnterior()
isSiguiente()
limpiarLista()
setAnterior()
setDisponible()
setElemento()
setElemento()
setNumPagina()
setSiguiente()
setTamPagina()
Participantes y responsabilidades:
 Consecuencias:

Fomenta la transparencia. Los detalles de la implementación están ocultos dentro de DAO


Facilita la migración entre los diferentes almacenes persistentes de migración.
Reduce la complejidad del código en los objetos del negocio.
Centraliza el acceso a datos en una capa separada.

 Patrones relacionadas:
Abstract Factory [GoF]: Factory para la estrategia DAO está basada en el método Abstract Factory.

Вам также может понравиться