Repositorio de Productos Orientado al Dominio en Java

Clase 21 de 35Curso de Java Spring

Resumen

¿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!