JavaEE - DAO - Data Access Object
Definición - DAO
DAO
→Data Access Object
↔ Objeto de Acceso a Datos
Concepto
-
Crear
interface
-
Tratamos distintos tipos de datos
"entidades"
en cada dato -
Parametrizamos la interfaz creando un
tipos genéricos ↔ <T>
-
Utilizado para ocultar detalles de la implementación dentro de la capa de persistencia
-
Ofrecer una
interfaz
sencillas en ciertas partes de la aplicación
Necesario cuando se utilizan API de bajo nivel como JDBC en las que las operaciones sobre la base de datos conllevan utilización de sentencias SQL que queremos aislar de otras capas de la aplicación
Utilidad
-
Acceder a datos
utilizandoobjetos
mediante losmétodos
de unaclase especializada en Java
-
Mediante
entidades
que se emparejan contablas
en labase de datos
-
Métodos
delDAO
que se emparejan con las operacionesCRUD
-
C →
Create
-
R →
Read
-
U →
Update
-
D →
Delete
-
-
Actúa de intermediario entre la aplicación y la base de datos
Clases DAO
habrá una porentidad
otabla
de labase de datos
y tendremosmétodos
para realizarconsultas genéricas
oadaptadas
a nuestralógica de negocio
package project.orm.manager.dao;
/**
*
*/
import java.util.List;
import java.util.Optional;
/**
* @author rad
*
* @param <T> - interface parametrizable mediante el complemento <T>
*/
public interface Dao<T> {
/**
* Recupera registro dentro de un objeto de tipo generico <T> de la bd
*
* @param id - Recibe 'id' en formato long y devolvera o no un objeto de tipo generico de la clase
*
* @return - Si no encuentra ningún registro retornamos un objeto Opcional sino el long 'id'
*/
Optional<T> get(long id);
/**
* Obtenemos todos los registros de tipo objeto generico <T>
*
* @return - Todos los objetos del tipo generico<T>
*/
List<T> getAll();
/**
* Crear nuevo objeto tipo generico <T> para guardarlos en la bd
*
* @param t - Recibe un objeto y no devolvera nada porque se guardará en la base de datos
*/
void save(T t);
/**
* Actualizar objeto tipo generico <T> con los datos
*
* @param t - Recibe el objeto de tipo Generico<T> a actualizar y no devuelve nada
*/
void update(T t);
/**
* Borrar objeto tipo generico <T> con los datos
*
* @param t
*/
void delete(T t);
}
-
Patrón de diseño
- Proporciona una
interface abstracta
hacia algún tipo de base de datos mediante otro mecanismo depersistencia
- Proporciona una
Patrón aplicable a la mayoría de los lenguajes de programación que necesitan uso de la persistencia y conexión con una base de datos asociados a las aplicaciones
Java EE
y lasbase de datos relacionales
a las que se accede mediante lasAPI
deJDBC
-
Asignar llamadas de aplicaciones de
capa de persistencia (DAO)
proporciona especificas operaciones de datos sin especificar detalles de labase de datos
-
Separa
acceso a datos
necesita laaplicación
(términos deobjetos
ytipos de datos
) específicos del dominio (lainterfaces pública
de laDAO
) como apoyar las necesidades de laDBMS especifico
, un esquema debase de datos
, etc. la implementación de laDAO
Ventajas
-
Usar
objetos
del tipo deacceso a datos
en la separación de las2 capas
de laaplicación
que existen y que no conocen como esta implementada una capa con respeto a la otra y que se tiene en cuenta que en el futuro puedan evolucionar de forma independiente pero mantenga la funcionalidadLos detalles del almacenamiento están ocultos del resto de la aplicación
-
Cambiar la
lógica de negocio
basada en lainterfaz DAO
mientras los cambios en lalógica de persistencia
no afecten a losclientes
que utilizanDAO
siempre que lainterfaz
siga implementada -
Cambios mecanismo de
persistencia
implementarsemodificando
una implementaciónDAO
mientras el resto de aplicaciónno se ve afectado
Desventajas
Leaky abstraction
→ abstracción con fugasAbstracción que filtra detalles que se supone que debe abstraer
-
Duplicidad de código
-
Inversión de abstracción
- La
abstracción
de laDAO
como un objeto Java puede ocultar el alto costo de cadaacceso
a labase de datos
y puede obligar a los desarrolladores aactivar múltiples consultas
a labase de datos
pararecuperar información
que podría devolverse en una sola operación utilizando operaciones de conjunto deSQL
Funcionamiento
-
Mueve los
datos
entre losobjetos
y losregistros
de labase de datos
comointermediario
-
Pruebas unitarias del código se facilita al sustituir el
DAO
con unadoble prueba
dentro del mismotest
haciendo que sean esas pruebas independientes a lacapa de persistencia
-
Dentro del contexto de la
programación Java
losobjetos de acceso a datos
como concepto de diseño se puedenimplementar
de distintas formas dependiendo de lainterfaz
que separe las partes deacceso a los datos
de lalógica de la aplicación
comoFramework
y demás elementos que lo compongan
Herramientas Populares de los ORM para realizar DAO
-
Frameworks :
Hibernate, iBATIS
-
Library :
JPA, como Apache OpenJPA
Casos de uso
-
App
de contratos a desarrollar para 2 clientes diferentes -
Las
especificaciones
de la aplicación son casi idénticas para los 2 clientes -
Ambos clientes administran datos usando
bases de datos SQL
, pero una empresa usa unabase de datos propietaria
y la otra usa unaalternativa
decódigo abierto
lo que implica que lacapa de persistencia
de suaplicación
deberá implementarse de 2 maneras diferentes -
A medida que surgen nuevos clientes se necesiten implementaciones adicionales en la
app
-
El uso del
patrón Objeto
deacceso a datos
garantizaría la cantidad correcta deabstracción
yencapsulación
requerida para acceder a cualquiera de las diferentesbases de datos
deback-end
de la aplicación
Deja un comentario