Download Data Source - Esteban Calabria

Document related concepts

Capa de acceso a datos wikipedia , lookup

Openwebnet wikipedia , lookup

Lenguaje de definición de datos wikipedia , lookup

MyBatis wikipedia , lookup

Object Data Management Group wikipedia , lookup

Transcript
Data Source
Lic. Esteban Calabria
2007
Layer Data Source
Los sistemas raramente viven aislados
del mundo.
La responsabilidad de la capa Data
Source es manejar la comunicación del
nuestro sistema con otros.
Debido a su importancia en las
aplicaciones empresariales, nos
centraremos en la comunicación con el
Motor de la Base de Datos
Persistencia
Patrones de Persistencia
Los patrones que analizaremos son:
Patrones
Active Record
Patrones
Negocio-Persistencia
Persistencia
Gateway
Table Data Gateway
Row Data Gateway
DAO – Data Access Object
Data Mapper
Patrones Negocio-Persistencia
Active Record
Active Record
Un objeto que envuelve una fila en una tabla o
vista de la base de datos, encapsula el
acceso a la base de datos y agrega lógica de
negocios a esos datos
Active Record
Active Records
Un ejemplo de los active records en el
mundo J2EE son los beans que manejan
su propia persistencia conocidos como
Bean-Managed Persistence
http://java.sun.com/j2ee/tutorial/1_3fcs/doc/BMP.html
Patrones Persistencia
Table Data Gateway
Table Data Gateway
Un objeto que actúa como un gateway a una tabla
de una base de datos. Una instancia maneja
todas las filas de la tabla
Table Data Gateway
Contiene todos los SQL para acceder a
una tabla o vista.
Maneja los select, insert, update y delete.
El resto del sistema llama a los métodos
de la Table Data Gateway cada vez que
quiere acceder a la Base de Datos
Table Data Gateway
Es un esquema simple y fácil de entender.
Resulta una forma natural de encapsular
el accesos a la base de datos.
Trabaja bien en plataformas que estén
preparadas para trabajar con RecordSets.
Table Data Gateway
Si bien naturalmente se piensa tener un
Table Data Gateway por cada Tabla de
nuestra base de datos, se pueden
considerar tener un Table Data Gateway
para una vista, incuso para un query o
consulta a la base de datos específica.
En ese último caso habrá que considerar
como manejar los inserts y los updates.
Table Data Gateway
Un tema a considerar es que devuelven
los métodos e búsqueda en la Table
Data Gateway, por ejemplo:
Según
el entorno puede devolver un
RecordSet
Puede devolver uno o una colección de
Data Transfer Objects (ver DAO)
Puede devolver un Vector, una Lista o un
Map
Puede devolver un iterador
Puede devolver directamente objetos de
negocio
Table Data Gateway
Por ejemplo se puede usar con
Transaction Script, sobre todo si el
entorno con el que trabajamos posee un
buen manejo de los RecordSets.
Parece ser un patrón natural para trabajar
con Table Module.
Table Data Gateway
Algunas Ideas
Se
puede generar de forma simple por medio
de code generation un Table Data Gateway a
nuestra Base de Datos.
De esa forma ante un cambio de versión de
nuestra base de datos nos puede ayudar a
verificar que el código fuente de la versión
anterior siga funcionando
Table Data Gateway
Ventajas
Es
una forma natural, simple y fácil de
entender para encapsular el acceso a la base
de datos
Su simpleza.
Data Access Object
Data Access Object (DAO)
Un objeto que abstrae, encasula y maneja el
acceso a un origen de datos para almacenar y
recuperar datos del mismo
Data Access Object (DAO)
Data Access Object (DAO)
En esencia es un Table Gateway, pero lo
incluimos un apartado aparte pues.
Es
un patrón mas relacionado con el mundo
java, figura entre los Core J2EE Patterns.
Hay muchos artículos, bibliografías y/o
arquitecturas existentes que lo utilizan
refiriéndose a él con el nombre genérico de
DAO
Data Access Object (DAO)
BusinessObject (Capa de Negocios).
Es
el cliente que necesita los datos. Puede
ser un Domain Model o un Transaction
Script. Delega todas las operaciones de
recuperacion y persistencia de los datos al
DataAccessObject.
DataAccessObject
El
objeto que abstrae la implementacion
subyacente de acceso a datos de la capa
de negocios.
Data Access Object (DAO)
DataSource
Representa
la implementacion del origen de datos
que puede ser una base relaciona, un archivo xml, un
archivo plano, otro sistema, etc.
TransferObject
Es
DTO. que se usa para transmitir los datos entre
ambas capas ya sea para recuperar los datos o para
actualizar el Data Source
Data Access Object
Como se puede ver es un Table Data Gateway
orientado funcionar con Data Transfer Objects
en vez de con RecordSets.
Se pueden generar los DAO y los DTO
mediante alguna estrategia de Code
Generation.
Algunas implementaciones que he visto
devuelven directamente los objetos de negocio
con logica
Data Access Object
Se puede usar junto
con un Abstract
Factory y tener una
jerarquía de DAOs
Incluso se puede
aplicar Dependency
Inyecto e inyectar
los DAOs
Row Data Gateway
Row Data Gateway
Un objeto que actúa
como un gateway a
un registro de la
base de datos. Hay
una instancia por fila
Row Data Gateway
Un Row Data
Gateway actúa
como un objeto que
replica a un registro
de la base de datos,
donde cada columna
se transforma en un
campo
Cada
Row Data
Gateway contiene
la lógica de acceso
a la Base de Datos,
es decir, los insert,
update y delete.
Row Data Gateway
Cómo
manejamos la lógica para las
búsquedas?
Dónde ponemos los métodos que
transformen el resultado de un select en
un Row Data Gateway?
Las posibles opciones son:
Incluirlos
como métodos estáticos dentro
del Row Data Gateway
Implementarlos en objetos finders
separados
Row Data Gateway
Además de tener un Row Data Gateway que
replique un registro de una tabla de la base de
datos, se puede tener uno que replique un
registro correspondiente al resultado de un SQL.
En ese último caso hay que considerar como
manejar los updates en el caso de que se
soporten
Row Data Gateway
Particularmente funciona bien con Transaction
Script
La diferencia entre un Active Record y un Row
Data Gateway es que este último no contiene
lógica de negocios
Mientras que el Table Gateway presenta una
interfaz coarsed grained el Row Data Gateway
presenta una interfaz fine grained
Row Data Gateway
Idea
Una
posibilidad generar todos los Row Data
Gateway por medio de code generation
(generación automática de código mediante
una programa).
Data Mapper
Data Mapper
Una capa de Mappers que transportam los datos
entre los objetos y la base de datos
manteniendolos, al mismo tiempo,
independiente entre si y el mapper.
Data Mapper
Visibilidad
El
Mapper ve la base de datos y ve a los
objetos de negocio, ellos no ven al data
mapper
Cuando usarlo?
Este
patrón se usa para persistir un domain
model
Data Mapper
Las responsabilidades del Data Mapper
son:
Tranferir
datos bidirecionalmente entre la
representación en memoria de los objetos y la
base de datos
Desentender los objetos en memoria de la
base de datos subyasente, el SQL y el
esquema subyacente.
Data Mapper
Deseable
Cuando
se tiene un modelo complejos y se
desea aprovechar las capacidades de los
objetos para organizar los datos y el
comportamiento de la aplicación
Esto puede llevarnos a que el esquema relacional
de la base de datos u el esquema que definamos
de nuestro objetos difierane entre sí.
Data Mapper
Los objetos y las base de datos
relacionales tienen difetentes formas de
estructurar las relaciones.
Manejo
de las Colecciones en los objetos.
Manejo de la herencia en los objetos.
Manejo de las relaciones como claves
foraneas en la base de datos.
Patrones Adicionales
Patrones Adicionales
Unit Of Work
Identity Field
Identity Map
Lazy Load
Metadata Mapping
Metadata Mapping
Describe el mapeo del modelo de objetos
contra la base de datos en una serie de
archivos por ejemplo xml
Es la estrategia usada por diversos
frameworks de persistencia como el
hibernate
Explorando algunas alternativas
Explorando algunas alternativas
Active Record
Transaction Script -> Table Gateway
Transaction Script -> Row Data Gateway
Table Module -> Table Gateway
Domain Model -> Table Gateway
Domain Model -> Row Data Gateway
Domain Model -> Data Mapper
Domain Model -> Metadata Mapping
http://java.sun.com/blueprints/corej2eepatt
erns/Patterns/DataAccessObject.html
http://java.sun.com/blueprints/patterns/DA
O.html