Repositorio de Productos Orientado al Dominio en Java
Clase 21 de 35 • Curso de Java Spring
Contenido del curso
- 10

Conceptos básicos de JPA y anotaciones en Java
03:04 - 11

Gestión de Bases de Datos con Spring Data JPA en Java
05:24 - 12

Conexión y Configuración de Base de Datos en Spring Boot
12:09 - 13

Mapeo de Tablas a Clases con JPA: Creación de Entities en Java
14:00 - 14

Creación de Entities con Clave Primaria Compuesta en JPA
06:49 - 15

Relaciones JPA: Categorías, Productos, Compras y Clientes
10:37 - 16

Repositorios de Spring Data: Gestión Eficiente de Bases de Datos
07:54 - 17

Consultas avanzadas con Query Methods en Spring Data
09:30
- 18

Clase de Repositorio de Productos con Spring Framework
05:19 - 19

Patrón DataMapper en Proyectos Java: Implementación y Beneficios
13:37 - 20

Creación de Mapeadores con MapStruct en Java
11:22 - 21

Repositorio de Productos Orientado al Dominio en Java
09:27 - 22

Inyección de Dependencias en Spring Framework
04:34 - 23

Implementación de Servicios de Dominio en Java con Spring Framework
09:12 - 24

Creación de Controlador REST en Spring Boot
07:14 - 25

Anotaciones Spring para Exponer APIs RESTful
09:25
- 26

Control de Respuestas HTTP con ResponseEntity en Spring
09:11 - 27

Modelado de Dominio para Gestión de Compras en Supermercados
05:27 - 28

Mapeadores en Java para Conversión de Compras y Productos
10:45 - 29

Implementación de Repositorio en Java para Compras en Supermercado
09:01 - 30

Pruebas de API de Compras con Postman
02:56 - 31

Documentación de APIs con Swagger en Spring Boot
12:55
¿Cómo orientar el repositorio de productos al dominio?
Para desarrollar software sólido y flexible, es fundamental orientar los repositorios al dominio. Esta práctica desvincula la lógica de negocio de la infraestructura de almacenamiento, adaptándose a cambios futuros, como migraciones a distintas bases de datos. En este caso, reemplazamos una estructura rígida y dependiente de una tabla SQL particular por una forma más abstracta y orientada al dominio. Empecemos paso a paso.
¿Qué es la implementación de interfaces en repositorios?
Para comenzar, debemos asegurarnos de que nuestro productRepositorio implemente la interfaz que diseñamos previamente. Esta interfaz define los métodos necesarios que nuestro dominio requiere, como recuperar todos los productos o salvar un nuevo producto.
public class ProductRepositorioImpl implements ProductRepositorio {
// Mensaje de advertencia debido a métodos no implementados
// Implementación pendiente de métodos obligatorios de la interfaz
}
¿Cómo usar un mapper para transformar entidades?
El siguiente paso es la utilización de un ProductMapper que facilite la conversión de producto a Product. Esta clase actúa como intermediario, simplificando la transformación de las entidades de la base de datos al objeto del dominio.
- Uso del método
getAll: Aquí obtenemos productos de un repositorio y los transformamos a través del mapper.
@Override
public List<Product> getAll() {
List<Producto> productos = cruRepositorioy.findAll();
return maper.toProducts(productos); // Transformamos la lista
}
¿Cómo trabajar con Optional para consultas específicas?
La clase Optional de Java nos ayuda a manejar valores que podrían ser nulos de manera segura y eficiente. Implementamos métodos como getByCategory y getProductosEscasos haciendo uso de esta característica.
- Consulta por categoría:
@Override
public Optional<List<Product>> getByCategory(int categoriaId) {
List<Producto> productos = productRepositorio.findByIdCategoriaOrderByNombreAsc(categoriaId);
return Optional.of(maper.toProducts(productos)); // Conversión y empaque en Optional
}
¿Cómo manejar el guardado y eliminación de productos?
Los procesos de guardar y eliminar productos también se simplifican al orientarnos al dominio. Aquí, el mapeo inverso se hace de Product a producto antes de persistir los cambios.
- Guardar un producto:
@Override
public Product save(Product product) {
Producto producto = maper.toProducto(product); // Conversión inversa
Producto savedProducto = productRepositorio.save(producto);
return maper.toProduct(savedProducto);
}
- Eliminar un producto:
La eliminación es directa dado que no requiere una conversión previa al no retornar un resultado.
¿Por qué es esencial orientar el repositorio al dominio?
Adaptar un repositorio al dominio aporta gran flexibilidad al proyecto. Flexibilidad significa poder cambiar la base de datos subyacente sin modificar la lógica ni el comportamiento de la aplicación. Por ejemplo, si migramos de SQL a MongoDB, el diseño ya anticipará tal cambio, permitiendo una transición suave con mínimos ajustes.
La orientación al dominio es clave en el desarrollo de software moderno y escalable. Aprender a integrar conceptos como mapeo y uso de Optional fortalece las habilidades de diseño, proporcionando un código más limpio y adaptable. Continúa explorando y desarrollando tus habilidades de programación, ¡el mundo del desarrollo siempre ofrece algo nuevo por descubrir!