Francisco Lopez Campos
Saúl Chávez Sánchez
Una API robusta, limpia y preparada para cambios necesita una arquitectura sólida. ¿Por qué? Porque un código acoplado a la base de datos limita la evolución y expone detalles que deberían permanecer internos. Aquí exploramos cómo estructurar adecuadamente una API de películas en Java usando buenas prácticas, enfocándonos en la introducción de la capa de dominio y el uso del patrón Data Mapper.
¿Cómo afecta el acoplamiento entre controlador y base de datos el diseño de tu API?
Actualmente, el controlador llama directamente al CRUD del Movie Entity, exponiendo la estructura interna de la base de datos. Esto implica varios riesgos:
Estos problemas hacen que la API sea difícil de mantener, frágil y dependiente de la estructura interna de la base de datos.
¿Por qué es clave separar responsabilidades entre capas en una API?
Separar responsabilidades permite que cada parte del sistema cumpla una función clara y focalizada. Dejar fuera la capa de dominio va contra los principios de una buena arquitectura. Con una correcta separación:
El patrón Data Mapper ayuda a lograr esto separando el modelo de dominio de cómo se expone en la API o se almacena en la base de datos.
¿Cómo implementar Movie DTO y Movie Repository siguiendo buenas prácticas?
Definir el Movie DTO (Data Transfer Object):
domain.dto.Crear la interfaz Movie Repository:
domain.repository.getAll, que retorna una lista de MovieDTO.Implementar Movie Service:
service.getAll, que internamente usa la interfaz y retorna los MovieDTO.Actualizar el Movie Controller:
¿Qué ventajas aporta esta nueva estructura a tu API?
¿Qué sigue para perfeccionar la capa de persistencia?
Aún falta adaptar la capa de persistencia para que devuelva MovieDTO en vez de MovieEntity. Además, se mencionó el uso de map struct para transformar entre entidades y DTOs y así seguir manteniendo un dominio limpio y desacoplado.
¿Te gustaría saber cómo implementar la conversión entre entidades y DTOs usando map struct? ¡Comparte tus dudas o comenta tu experiencia en proyectos similares!
Francisco Lopez Campos
Saúl Chávez Sánchez
Will Carlo
Ronny Camacho
Wilfredo Marquez Boza
Diego Badillo Aguilar
JUAN DAVID CORRALES AGUILAR
Alexander Flores Rayme
Luis Ricardo Legreaux Medina
acardonag Cardona Giraldo
ANDRES ALFONSO MIRA MEJIA
Record.- Permite definir clases inmutables, los atributos los recibe de una manera mas sencilla y descriptiva, java se encargara de generar el constructor y sus metodos de acceso
Para quienes venimos de lenguages no tan arraigados a las clases y objetos, los record son un equivalente a una estrcutura, como lo puede ser en C o C++, o a objetos de JavaScript que contienen datos con nombre. Claro, con las ventajas que tienen las clases de Java.
Siempre eh creado mis DTOs de la manera tradicional con lombock para los getter y setters, e inclusive usando @data, esto de usar un Record y que haga todas esas funciones (incluido el equals) es un ahorro de tiempo, lo voy a probar en mis proyectos futuros, se aceptan recomendaciones y advertencias si alguien más ya lo usó o experimntó.
Las Clases son necesarias si requieres algun cambio, los Record son perfectos para enviar datos al cliente, porque son de solo lectura, por lo que la inmutabilidad encaja perfectamente, justo por eso los Record solo tienen Getters, toString, equals y no Setters. En la mayor parte de mis implementaciones creo una carpeta dto con dos adentro, response y request, y en la mayoria de los casos dejo Clases para request (Si requieren cambios) y Record para Response, a parte que son tecnicamente hablando el JVM los procesa con mas facilidad, mejores optimizaciones, y favorece al garbage collector, porque se mitiga el problema de la mutación de referencias en memoria.
Finalmente terminas usando mas Java que Spring, y claramente hay que aprovechar cosas nativas de los lenguajes, que eviten tanta capas de abstraccion lo que favorece el rendimiento
porque el dto en ingles?
Para buenas practicas
DataTransferObject
Algo a tener en cuenta es usar las ResponseEntity como buena practica con spring para manejar respuestas web
super, yo que no tengo experiencia en java, solo javascript logro entender la explicacion
✅