Anda di halaman 1dari 5

Patrones de diseo: Aquellos que expresan esquemas para definir estructuras de diseo (o sus

relaciones) con las que construir sistemas de software


Los patrones de diseo son la base para la bsqueda de soluciones a problemas comunes en el
desarrollo de software y otros mbitos referentes al diseo de interaccin o interfaces.
Un patrn de diseo resulta ser una solucin a un problema de diseo. Para que una solucin sea
considerada un patrn debe poseer ciertas caractersticas. Una de ellas es que debe haber
comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que
debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseo en
distintas circunstancias.

Definicin de Persistencia de objetos
Se entiende por persistencia la accin de preservar la informacin de un objeto de forma
permanente (guardar), pero a su vez tambin se refiere a poder recuperar la informacin del
mismo (leer) para que pueda ser nuevamente utilizada.

Patrn de Diseo: Data Access Object (DAO) + Data Transfer Object (DTO)

Los Objetos de Acceso a Datos son un Patrn de los subordinados de Diseo Core J2EE y
considerados una buena prctica. La ventaja de usar objetos de acceso a datos es que
cualquier objeto de negocio (aquel que contiene detalles especficos de operacin o aplicacin) no
requiere conocimiento directo del destino final de la informacin que manipula.
Los Objetos de Acceso a Datos pueden usarse en Java para aislar a una aplicacin de la tecnologa
de persistencia Java subyacente (API de Persistencia Java), la cual podra ser JDBC, JDO, Enterprise
JavaBeans, TopLink, EclipseLink, Hibernate, iBATIS, o cualquier otra tecnologa de persistencia.
Usando Objetos de Acceso de Datos significa que la tecnologa subyacente puede ser actualizada o
cambiada sin cambiar otras partes de la aplicacin.
La flexibilidad tiene un precio. Cuando se aaden DAOs a una aplicacin, la complejidad adicional
de usar otra capa de persistencia incrementa la cantidad de cdigo ejecutado durante tiempo de
ejecucin. La configuracin de las capas de persistencia requiere en la mayora de los casos mucho
trabajo.
Las aplicaciones crticas con el rendimiento no deberan usar DAOs


DAO es que nos provee de una forma totalmente abstracta de acceso a datos
En software de computadores, un Data Access Object (DAO, Objeto de Acceso a Datos) es un
componente de software que suministra una interfaz comn entre la aplicacin y uno o ms
dispositivos de almacenamiento de datos, tales como una Base de datos o un archivo. El trmino
se aplica frecuentemente al Patrn de diseo Object.


Abstraccin puede referirse a:
Abstraccin (informtica), aislar un elemento de su contexto o del resto de los elementos que lo
acompaan.
Abstraccin (filosofa), acto mental en el que conceptualmente se asla un objeto o una propiedad
de un objeto.
Abstraccin (psicologa), proceso que implica reducir los componentes fundamentales de
informacin de un fenmeno para conservar sus rasgos ms relevantes.

Capa de abstraccin, manera de ocultar los detalles de implementacin de ciertas funcionalidades.
Inversin de abstraccin, anti patrn que tiene lugar cuando una interfaz no expone las
funcionalidades requeridas por los usuarios.
Una capa de abstraccin (o nivel de abstraccin) es una forma de ocultar los detalles de
implementacin de ciertas funcionalidades

Soporte DAO (Data Access Object) y JDBC

El paquete DAO provee una capa de abstraccin de JDBC, el patrn DAO es uno de los ms
comnmente utilizados en aplicaciones J2EE, y la arquitectura de acceso a datos de Spring
proporciona un sofisticado pero an sencillo soporte la misma.

Los DAO son un patrn de diseo J2EE y considerados una buena prctica. La ventaja de usar
objetos de acceso a datos es que cualquier objeto de negocio (el cual contiene detalles especficos
de operacin o aplicacin) no requiere conocimiento directo del destino final de la informacin
que manipula.
Los DAO pueden usarse en Java para aislar a una aplicacin de la tecnologa de persistencia Java
subyacente (API de Persistencia Java), la cual podra ser JDBC, JDO, EJB CMP (Persistencia
controlada por el Contenedor), TopLink, Hibernate, iBATIS, o cualquier otra tecnologa de
persistencia. Usando DAO significa que la tecnologa subyacente puede ser actualizada o cambiada
sin cambiar otras partes de la aplicacin.

JDBC es el acrnimo de Java Database Connectivity, un API que permite la ejecucin de
operaciones sobre bases de datos desde el lenguaje de programacin Java independientemente
del sistema de operacin donde se ejecute o de la base de datos a la cual se accede utilizando el
dialecto SQL del modelo de base de datos que se utilice.
El API JDBC se presenta como una coleccin de interfaces Java y mtodos de gestin de
manejadores de conexin hacia cada modelo especfico de base de datos. Un manejador de
conexiones hacia un modelo de base de datos en particular es un conjunto de clases que
implementan las interfaces Java y que utilizan los mtodos de registro para declarar los tipos de
localizadores a base de datos (URL) que pueden manejar. Para utilizar una base de datos
particular, el usuario ejecuta su programa junto con la librera de conexin apropiada al modelo de
su base de datos, y accede a ella estableciendo una conexin, para ello provee en localizador a la
base de datos y los parmetros de conexin especficos. A partir de all puede realizar con
cualquier tipo de tareas con la base de datos a las que tenga permiso: consultas, actualizaciones,
creado modificado y borrado de tablas, ejecucin de procedimientos almacenados en la base de
datos, etc.
JDBC cumple su objetivo mediante un conjunto de interfaces de java, cada una implementada de
manera diferente por distintos distribuidores. El conjunto de clases que la componen se denomina
el controlador JDBC.

Spring JDBC framework se construye sobre el ncleo de la API JDBC de J2SE, y es la tecnologa de
acceso a datos de ms bajo nivel que Spring soporta. Otras tecnologas de alto nivel son iBATIS SQL
Maps, Hibernate, JDO.

Objeto de transferencia de datos (DTO) es un objeto que lleva datos entre procesos. La motivacin
para el uso que tiene que ver con el hecho de que la comunicacin entre procesos se realiza por lo
general recurrir a interfaces remotas (por ejemplo, servicios web), donde cada llamada es una
operacin costosa. Debido a que la mayor parte del coste de cada llamada es relacionada para el
tiempo de ida y vuelta entre el cliente y el servidor, una forma de reducir el nmero de llamadas
es utilizar un objeto (DTO) que agrega los datos que le han sido transferidos por las varias
llamadas, pero que es servida por uno llamar solamente.
La diferencia entre los objetos de transferencia de datos y objetos de negocio o los objetos de
acceso a datos es que una organizacin de narcotrfico no tiene ningn comportamiento, excepto
para el almacenamiento y la recuperacin de sus propios datos (descriptores de acceso y
mutators). DTO son objetos simples que no debe contener ninguna lgica de negocio que
requerira pruebas.
Este patrn se utiliza a menudo de forma incorrecta fuera de las interfaces remotas. Esto ha
provocado una respuesta por parte de su autor en el que reitera que todo el propsito de OTD es
cambiar los datos en llamadas remotas caros.

El chiste del DAO es que nos provee de una forma totalmente abstracta de acceso a datos. Es
decir, puedo acceder a mi modelo de datos, pero irnicamente a travs del conjunto de mtodos
que me brinda un DAO. Si tengo un DAO para coches, por ejemplo CocheDAO, en l deber tener
definido por ejemplo un mtodo Count() que me retornar el total de coches que tengo en mi
base de datos. No s cmo est implementado, ni qu base de datos utiliza (si es que accede a una
base de datos), lo nico que s es que resuelve mi problema.

Por lo tanto, desde la parte del Controlador de mi aplicacin, puedo acceder a mi Modelo
utilizando el patrn de diseo que ofrece DAO, de forma totalmente transparente. Esto por
ejemplo nos llevar-a a pensar que nuestro CocheDAO podr-a contener otros mtodos, como el
mtodo Delete (que borrar-a un coche de la base de datos), Update (que actualizar-a los datos de
un coche), GetCochesByMarca (que a partir de una marcha retornar-a los coches de la marca que
hay en la base de datos), etc.

Todo esto suena en principio a lo mismo que ser-a tener una clase llamada Coche llena de
mtodos static a los cuales llamar-a cuando fuera necesario. Esto, pues claro, resuelve el
problema de tener todo el acceso a la tabla Coche centralizado, ol, bien, somos ordenados, pero
DAO va mucho ms all. Cmo resolver-ais el problema de devolver un listado de coches a travs
de vuestra clase con mtodos static? Pues a lo mejor vuestro mtodo GetCoches() retorna un
dataset rellenado con los coches, o un datareader/recordset, o una lista separada por comas, o
una estructura xml, o un array Pero los DAO incluyen otro concepto que es de los DTO.
Los DTO son un tipo de objetos que sirven nicamente para transportar datos. Por ejemplo, el
objeto de transferencia de datos de un coche podr-a ser un CocheDTO (o CocheBean para los
javeros). Entonces, DAO, lo que devuelve es una lista genrica de CocheBean, o tal vez un
CocheBean si estamos buscando informacin de un solo coche. Para que os hagis una idea, un
CocheBean contiene nicamente propiedades de un coche como por ejemplo Marca,
NumeroPuertas, Matr-cula, etc. El DAO, tras una peticin del Controlador, rellena un DTO o un
conjunto de ellos, y lo devuelve al Controlador.

Y todo este lo para qu? Pues muy sencillo, si vuestro controlador ataca al modelo utilizando
DAO y DTO estis consiguiendo 100% la separacin entre el Controlador y el Modelo. Ante
cualquier cambio que se diera en la forma de acceder a los datos, pongamos por ejemplo que a
partir de ahora en lugar de sacar los coches de una tabla coches se hace de un servicio web que
retorna coches, vuestro modelo no se va a enterar, ya que lo que le va a seguir llegando van a ser
siempre CocheBean. Consegu-s un impacto cero patatero en vuestro Controlador (y en la Vista
claro, pero eso ya lo hab-amos conseguido separando la Vista del Controlador).

Y an ms, si cada uno de vuestros DAO lo preparis para seguir el patrn Singleton, tendris
siempre una nica instancia de la clase CocheDAO en memoria, por lo que aunque tengis 200
usuarios tirando de dicho DAO tendris una nica copia en memoria, con el ahorro que esto
supone. Esto no ocurre por ejemplo si usis static en todos los mtodos de vuestras clases de
acceso a datos (y os recuerdo que en un proyecto mediano el nmero de mtodos que llegan a
acumularse para acceso a datos suele ser bastante grande).










Un ejemplo de cdigo? Venga, vale, aceptamos barco, imaginaos que atacamos a una hipottica
clase CocheDAO:

// GetInstance pide la instancia de la clase mediante el Singleton, CocheDAO tiene su constructor
en modo privado.
CocheBean coche = CocheDAO.GetInstance().GetCocheByMatricula(IB-3234-ZX);
// ahora tenemos un CocheBean, si no es nulo es que ha llegado bien, cogemos sus datos
if (coche != null)
{
txtMatricula.Text = coche.Matricula;
txtMarca.Text = coche.Marca;
txtNumeroPuertas.Text = coche.NumeroPuertas;
}

Y qu ocurre en el Controlador si cambiamos el nombre del campo matr-cula en la tabla coches?
Pues nada, ni se entera.

Para finalizar os aado un link a un rar que he preparado con un DAO y un DTO preparados, que
acceden a una hipottica tabla de Coches. Fijaros en el DAO lo que hace el Singleton, que adems
de forzar la utilizacin del mtodo GetInstance, utiliza exclusin mtua para evitar que se tenga
ms de una instancia del DAO en el caso de no haberse creado an la instancia y dos usuarios
accedieran al mismo tiempo al mtodo GetInstance. El mtodo GetCoche retorna un CocheBean,
pero el mtodo GetCoches lo que hace es retornar un lista genrica de CocheBean. Veris adems
que CocheDAO hereda de BaseDAO, todos los DAOS deber-an heredar de all- ya que BaseDAO les
ofrece entre otras cosas la conexin a la base de datos y una serie de mtodos comunes que
pueden utilizar (BaseDAO lo he dejado algo bsico slo para que se entienda conceptualmente
qu es lo que se supone que debe hacer). Tambin tenis la definicin de CocheBean. Por ltimo,
veris que existe un archivo llamado Excepciones donde se tipifican las excepciones que puede
generar un DAO, una de las buenas prcticas de las que ya hemos hablado en otros art-culos.
Os contar-a adems que DAO puede implementarse junto a DTO, pero adems utilizando el
modelo de Factora, pero esto, lo dejaremos para ms adelante.

Anda mungkin juga menyukai