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
interfazsencillas 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 datosutilizandoobjetosmediante losmétodosde unaclase especializada en Java -
Mediante
entidadesque se emparejan contablasen labase de datos-
MétodosdelDAOque 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 DAOhabrá una porentidadotablade labase de datosy tendremosmétodospara realizarconsultas genéricasoadaptadasa 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 abstractahacia 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 EEy lasbase de datos relacionalesa las que se accede mediante lasAPIdeJDBC
-
Asignar llamadas de aplicaciones de
capa de persistencia (DAO)proporciona especificas operaciones de datos sin especificar detalles de labase de datos -
Separa
acceso a datosnecesita laaplicación(términos deobjetosytipos de datos) específicos del dominio (lainterfaces públicade laDAO) como apoyar las necesidades de laDBMS especifico, un esquema debase de datos, etc. la implementación de laDAO
Ventajas
-
Usar
objetosdel tipo deacceso a datosen la separación de las2 capasde laaplicaciónque 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 negociobasada en lainterfaz DAOmientras los cambios en lalógica de persistenciano afecten a losclientesque utilizanDAOsiempre que lainterfazsiga implementada -
Cambios mecanismo de
persistenciaimplementarsemodificandouna implementaciónDAOmientras 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ónde laDAOcomo un objeto Java puede ocultar el alto costo de cadaaccesoa labase de datosy puede obligar a los desarrolladores aactivar múltiples consultasa labase de datospararecuperar informaciónque podría devolverse en una sola operación utilizando operaciones de conjunto deSQL
Funcionamiento
-
Mueve los
datosentre losobjetosy losregistrosde labase de datoscomointermediario -
Pruebas unitarias del código se facilita al sustituir el
DAOcon unadoble pruebadentro del mismotesthaciendo que sean esas pruebas independientes a lacapa de persistencia -
Dentro del contexto de la
programación Javalosobjetos de acceso a datoscomo concepto de diseño se puedenimplementarde distintas formas dependiendo de lainterfazque separe las partes deacceso a los datosde lalógica de la aplicacióncomoFrameworky 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
-
Appde contratos a desarrollar para 2 clientes diferentes -
Las
especificacionesde 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 propietariay la otra usa unaalternativadecódigo abiertolo que implica que lacapa de persistenciade suaplicacióndeberá implementarse de 2 maneras diferentes -
A medida que surgen nuevos clientes se necesiten implementaciones adicionales en la
app -
El uso del
patrón Objetodeacceso a datosgarantizaría la cantidad correcta deabstracciónyencapsulaciónrequerida para acceder a cualquiera de las diferentesbases de datosdeback-endde la aplicación
Deja un comentario