Ir al contenido principal

Un poco tarde, pero DAO al fin

Hace mucho tiempo que quería escribir este artículo sobre el DAO, pero no había tenido el impulso necesario para hacerlo. No sé bien lo que me impulsa ahora, pero aquí está.

Luego de averiguar por todo lado la mejor manera de hacer esto (conectarse y recuperar datos de una BD de manera ordenada y escalable) descubrí el DAO, un poco tarde ya que al año siguiente salió la versión beta de JPA y claro, todo el DAO se derrumbó (o comenzó a derrumbarse...)

La versión de JAVA basa todo su modelo en esta relación fundamental de 4 componentes:



En el caso del DAO con todas las recomendaciones integradas, tendrás un grupo de clases (DAO, DTO y otras de acuerdo a implementación) por tabla (por ejemplo Persona) por motor de base de datos o persistencia que desees utilizar: XML, Mysql, archivos, etc; donde no necesitas más que lo siguiente para hacer un select * from:


FactoryDAO factory = FactoryDAO.getOrCreate();
PersonaDAO dao = factory.newPersonaDAO();
Vector lista = dao.getTodos();


Lo elegante es que no necesitas SQL en ningún lugar y puedes tener la librería de los DAO aparte.

Pero veamos en detalle este modelo:



Primero podemos observar el modelo de DTO (la object-ivización de la tabla BTNombres en este caso).

También se ve el modelo de Factory que se debe crear (una implemetnación de Factory por persistencia utilizada).

En la siguiente figura:



Se puede ver el modelo de los DAO, BTNombresDAO es la clase que tiene todo el actualizar, seleccionar, eliminar....

Cómo fue que se pudo hacer esto si aplica a tablas diferentes?

1. Todas las tablas tienen un id, un campo que se llama id de tipo entero que funciona de llave
2. La superclase es en realidad una clase generic

De esta manera, el código para hacer el update al registro 3 de la tabla Persona se hace así:


FactoryDAO factory = FactoryDAO.Instancia;
PersonaDAO dao = factory.newPersonaDAO();
PersonaDTO objPersona = dao.seleccionar(3);

objPersona.setNombre("Pedro");
dao.actualizar();


Nuevamente vemos la elegancia de evitar el uso de SQL y la independencia con la conexión: no sabemos si escribe a un fichero, una base de datos, etc.

Para fines más laborales, he creado un generador de capa de datos que sigue el mismo modelo (lo único es que genera csharp y no java... oops), que toma en cuenta también lo siguiente:

- Código para aplicar Logs con log4net
- Los updates solamente se hacen sobre los campos que han cambiado y no sobre todas las columnas de un registro (util para ciertos análisis en algunas bases de datos)
- Posiblidad de realización de transacciones con modelo similar (aumentando dos líneas de código).

La última línea habla de transacciones, sin embargo, todo eso quedó atrás con el Java Transaction y el Java Persistence, por ello el título del artículo.

EL generador y más explicaciones sobre el modelo los subiré en unas semanas a sourceforge (anunciado aquí también). Pero para los impacientes les puedo pasar un código super desprolijo pero que hace el trabajo :-)

Comentarios

Entradas más populares de este blog

Hangfire, si no lo estás usando, estás haciendo algo mal (.NET world)

Hangfire es una librería espectacular que permite encolar tareas en un servidor de tareas que funciona dentro de tu aplicación web. Existen varios tutoriales que muestran de manera bastante sencilla cómo puedes ir integrando esto a tu aplicación. En esta publicación vamos a repetir, pero en español, y sobretodo vamos a tratar de ir lo más al punto posible. Qué es? Es una librería que la cargas a través de NUGET como cualquier otra librería. En realidad tenemos que cargar 3 librerías pero eso lo veremos más adelante. Una vez que hayas cargado todo lo necesario en tu aplicación web tendrás lo siguiente: Un servidor de colas : es decir, un lugar al cual le puedes mandar hacer cosas y no se olvida de esas cosas y las va ejecutando a medida que puede o tiene tiempo. Esto es muy útil para que tu aplicación no pierda tiempo haciendo algo que no necesita realmente hacer en ese instante y devolver más rápido al usuario final. Un tablero de control de colas : una serie de ...

Instalaste Docker y se come espacio en tu disco

Básicamente este post traduce la ayuda que vi en la siguiente página: https://stackoverflow.com/questions/62441307/how-can-i-change-the-location-of-docker-images-when-using-docker-desktop-on-wsl2 Entonces, la instalación que hice en mi máquina fue la siguiente: Activar Virtualización en el BIOS Instalar Docker Elegir que el motor linux se manejará con WSL2 En este caso tenemos dos cosas a tomar en cuenta: El archivo de SWAP que utiliza docker para los contenedores El archivo donde se guardan todas las imágenes. En ambos casos el lugar de los archivos que se usan están en la carpeta del usuario. A veces este lugar puede crecer mucho y nos quedamos sin espacio en disco. Liberando el SWAP de docker Primeramente vamos a parar el servicio de docker. Luego, En la carpeta del usuario se encuentra un archivo llamado .wslconfig. Solamente se lo debe editar y cambiar la línea # Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx swapfile=E:\\temp\\wsl-swap.v...

Reflexiones con Pareto

Nada como temprano en la mañana con 10 estudiantes para aprovechar de hacer algunas reflexiones. Hoy quiero compartir una que andaba rondando mi cabeza hace algunos años ya... y al final con los estudiantes salio algo en concreto. Para todo efecto, programador principiante y estudiante se utilizan para indicar lo mismo en este texto. Contexto Los estudiantes presentaron un práctico de programación relativamente complejo implementando el algoritmo de Dijkstra para encontrar el camino entre dos nodos de un grafo. El ambiente era, por supuesto, de caras largas, desvelados y con algo de frustración en lo poco de impulso que les quedaba. Todo esto a pesar de haber tenido varios días feriados y suficiente tiempo para preparar esto. Entiendo que es algo que un estudiante hace e hizo desde siempre... en toda latitud, pero con ligeros cambios (ya lo veremos) Pareto Luego de la revisión comenzamos leyendo lo que indica este principio en wikipedia: Así por ejemplo cuando hablamos de...