session1 - patrones de diseño - patrondao

5
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. DAO: Data Access Object

Upload: xitofu

Post on 07-Jun-2015

1.287 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: session1 - Patrones de Diseño - PatronDAO

ContextoEl 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.

DAO: Data Access Object

Page 2: session1 - Patrones de Diseño - PatronDAO

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:

Page 3: session1 - Patrones de Diseño - PatronDAO

OracleDAOFactory

DRIVER : String = ""DBURL : String = ""

createConnection()getUsuarioDAO()getProductoDAO()

(from dao)

MySqlDAOFactory

DRIVER : String = "com.mysql.jdbc.Driver"DBURL : String = "jdbc:mysql://localhost:3306/demodb"

createConnection()getUsuarioDAO()getProductoDAO()

(from dao)

MySqlDBConn

getConnection()

(from util)

Lista

lista : ArrayList = new ArrayList ()anterior : booleandisponible : intnumPagina : intsiguiente : booleantamPagina : int

eliminarElemento()eliminarElemento()existeElemento()getDisponible()getNumeroElementos()getElemento()getElemento()getFirstElementPage()getLastElementPage()getNextPage()getNumPagina()getPrevPage()getTamanio()getTamPagina()Init()isAnterior()isSiguiente()limpiarLista()setAnterior()setDisponible()setElemento()setElemento()setNumPagina()setSiguiente()setTamPagina()

(from util)

MySqlUsuarioDAO

validarUsuario()cambiarClave()actualizar()eliminar()getConnection()insertar()obtenerUsuarioPK()obtenerUsuarios()obtenerUsuariosxTipo()

(from dao)

+cnx

+objLista

login.jsp_Client

(from login.jsp)

DAOFactory

MYSQL : int = 1ORACLE : int = 2DB2 : int = 3SQLSERVER : int = 4XML : int = 5

getUsuarioDAO()getProductoDAO()getDAOFactory()

(from dao)

BeanUsuario

login : Stringpassword : Stringnombre : StringtipoUsuario : String

getLogin()getNombre()getPassword()getTipoUsuario()setLogin()setNombre()setPassword()setTipoUsuario()

(from beans)

+objBeanUsuario

Form

<<HTML Input>> usuario : text<<HTML Input>> clave : password

<<HTML Input>> cboEnviar : submit = Enviar<<HTML Input>> btnLimpiar : reset = Limpiar

(from login.jsp_Client)

UsuarioDAO

validarUsuario()cambiarClave()

actualizar()eliminar()insertar()

obtenerUsuarioPK()obtenerUsuarios()

obtenerUsuariosxTipo()

(from dao)

H S

ServletLogin

doPost()

(from servlets)

+objDAOFactory

+objBeanUsuario

<<post>>

+objUsuarioDAO

Page 4: session1 - Patrones de Diseño - PatronDAO

Participantes y responsabilidades:

Page 5: session1 - Patrones de Diseño - PatronDAO

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.