Construyendo un Sistema de E-Commerce con DDD

Como dev entusiasta por Java y Domain-Driven Design (DDD), quiero compartir mi proyecto DddEcommerceOrders, un sistema de gestión de pedidos para e-commerce que refleja mi entusiasmo por Java, Spring Boot y arquitectura de microservicios. Este proyecto…


This content originally appeared on DEV Community and was authored by Ximena Soto

Como dev entusiasta por Java y Domain-Driven Design (DDD), quiero compartir mi proyecto DddEcommerceOrders, un sistema de gestión de pedidos para e-commerce que refleja mi entusiasmo por Java, Spring Boot y arquitectura de microservicios. Este proyecto muestra mi compromiso con escribir código limpio y mi entusiasmo por el aprendizaje continuo en áreas como DevOps y AWS. En este artículo, te guiaré a través del proyecto, su diseño basado en DDD, y cómo refleja mi objetivo de atraer reclutadores internacionales con habilidades técnicas y un enfoque en crecimiento continuo.

¿Por qué DddEcommerceOrders?

Como dev, creo que construir proyectos reales es la mejor manera de demostrar competencia técnica y habilidades de resolución de problemas. DddEcommerceOrders (disponible en https://github.com/xsoto-developer/DddEcommerceOrders) es un sistema basado en microservicios que gestiona pedidos e inventario para una plataforma de e-commerce. Utiliza principios de DDD para crear una arquitectura limpia y escalable, ideal para destacar mi experiencia en Java y Spring Boot, así como mis primeros pasos en prácticas DevOps como CI/CD con GitHub Actions.

El proyecto tiene dos propósitos:

  1. Excelencia Técnica: Demuestra conceptos avanzados de DDD como Bounded Contexts, Agregados y Eventos de Dominio, implementados en una arquitectura de microservicios.
  2. Crecimiento Profesional: Refleja mi camino de aprendizaje y aplicación de prácticas modernas de ingeniería de software, incluyendo mi interés en DevOps y mi preparación para certificaciones AWS.

Visión General del Proyecto

DddEcommerceOrders se divide en dos microservicios:

  • orders-service: Gestiona el Bounded Context de Gestión de Pedidos, manejando la creación, procesamiento de pagos y cancelación de pedidos.
  • inventory-service: Gestiona el Bounded Context de Gestión de Inventario, manejando la reserva y liberación de stock.

Cada microservicio sigue una arquitectura limpia con tres capas:

  • Dominio: Modelos DDD (ej. Pedido y Producto) con lógica de negocio.
  • Aplicación: Servicios que orquestan casos de uso (ej. OrderService, InventoryService).
  • Infraestructura: APIs REST, listeners de eventos y persistencia con Spring Data JPA y H2.

Características Clave

  • Procesamiento de Pedidos: Crear pedidos, confirmar pagos y cancelarlos vía APIs REST.
  • Gestión de Inventario: Reservar stock al confirmar un pedido, usando eventos de dominio.
  • Documentación de APIs: Swagger UI para pruebas interactivas (/swagger-ui.html).
  • Pruebas: Tests unitarios con JUnit 5 para validar reglas de negocio.
  • CI/CD: Pipeline de GitHub Actions para compilación y pruebas automatizadas.

DDD en Acción

El proyecto se basa en dos Bounded Contexts:

  1. Gestión de Pedidos:
    • Agregado: Pedido (raíz) con LineaDePedido (value object) y Direccion (value object).
    • Lenguaje Ubicuo: Términos como "confirmar pedido" y "cancelar pedido" son consistentes en código y documentación.
    • Evento de Dominio: OrderConfirmedEvent activa la reserva de stock en el servicio de inventario.
  2. Gestión de Inventario:
    • Agregado: Producto (raíz) con Stock (value object).
    • Lenguaje Ubicuo: Términos como "reservar stock" y "liberar stock".
    • Manejo de Eventos: Escucha OrderConfirmedEvent para actualizar el stock.

Aquí tienes un diagrama UML del Bounded Context de Gestión de Pedidos, creado con Mermaid:

classDiagram
    class Pedido {
        -UUID id
        -List~LineaDePedido~ lineas
        -Direccion direccionEnvio
        -EstadoPedido estado
        -Double montoPago
        +confirmarPago(monto: double)
        +cancelar()
        +getId(): UUID
    }
    class LineaDePedido {
        -UUID productoId
        -int cantidad
        -double precioUnitario
    }
    class Direccion {
        -String calle
        -String ciudad
        -String codigoPostal
    }
    class EstadoPedido {
        <<enumeration>>
        PENDIENTE
        CONFIRMADO
        ENVIADO
        CANCELADO
    }
    Pedido o--> "many" LineaDePedido
    Pedido --> "1" Direccion
    Pedido --> "1" EstadoPedido

Aspectos Técnicos Destacados

Java y Spring Boot

El proyecto usa Java 17 y Spring Boot 3.2.0 para implementar una arquitectura de microservicios robusta. Decisiones técnicas clave incluyen:

  • Arquitectura Limpia: Separar la lógica de dominio de la infraestructura asegura mantenibilidad.
  • Spring Data JPA: Para persistencia con una base de datos H2 en memoria, ideal para desarrollo rápido.
  • Integración con Swagger: Documentación interactiva de APIs mejora la usabilidad.
  • Eventos de Dominio: Simulados con ApplicationEventPublisher de Spring para un acoplamiento bajo.

Prácticas DevOps

Como parte de mi incursión en DevOps, implementé un pipeline de GitHub Actions (.github/workflows/ci.yml) para automatizar compilaciones, pruebas y verificación de cobertura de código. Esto asegura calidad y fiabilidad, alineándose con prácticas modernas de desarrollo.

Preparación para AWS

Aunque el proyecto corre localmente con H2, su arquitectura de microservicios está lista para la nube. Estoy preparándome para certificaciones AWS, y planeo desplegar DddEcommerceOrders en AWS (ej. con ECS o EKS) para demostrar mis habilidades en la nube.

Lecciones Aprendidas

Construir DddEcommerceOrders me enseñó valiosas lecciones:

  • Desafíos de DDD: Definir Bounded Contexts claros y mantener un Lenguaje Ubicuo consistente requirió un modelado cuidadoso.
  • Comunicación entre Microservicios: Usar eventos de dominio para consistencia eventual fue una forma práctica de desacoplar servicios.
  • Depuración de Swagger: Inicialmente, Swagger mostraba "No operations defined in spec!" debido a problemas de escaneo de componentes. Añadir configuración explícita de OpenAPI y logging resolvió esto.
  • Acceso a la Base de Datos: Habilitar la consola H2 (/h2-console) e inicializar datos con data.sql facilitó la depuración.

Estas experiencias reforzaron mi compromiso con el aprendizaje continuo, motivándome a explorar herramientas DevOps y plataformas como AWS.

¡Pruébalo!

El código fuente está disponible en https://github.com/xsoto-developer/DddEcommerceOrders. Para ejecutar el proyecto:

  1. Clona el repositorio:
   git clone https://github.com/xsoto-developer/DddEcommerceOrders.git
  1. Compila y ejecuta cada microservicio:
   cd orders-service
   mvn clean install
   mvn spring-boot:run
   cd ../inventory-service
   mvn clean install
   mvn spring-boot:run
  1. Accede a Swagger UI:
    • Pedidos: http://localhost:8080/swagger-ui.html
    • Inventario: http://localhost:8081/swagger-ui.html
  2. Verifica datos en H2:
    • Navega a http://localhost:8080/h2-console (JDBC URL: jdbc:h2:mem:inventorydb, User: sa, Password: vacío).
    • Ejecuta SELECT * FROM PRODUCTO; para ver productos.

¿Qué Sigue?

Estoy entusiasmado por seguir creciendo como desarrollador. Mis próximos pasos incluyen:

  • Desplegar DddEcommerceOrders en AWS para mostrar experiencia en la nube.
  • Profundizar en DevOps con herramientas como Docker y Kubernetes.
  • Contribuir a proyectos open-source para colaborar con la comunidad global de desarrolladores.

Llamado a la Acción

¡Me encantaría recibir tu feedback sobre DddEcommerceOrders! Explora el proyecto en GitHub, pruébalo y comparte tus ideas. Si eres un reclutador o desarrollador interesado en Java, DDD o DevOps, ¡conectemos para discutir oportunidades de construir software impactante juntos!


This content originally appeared on DEV Community and was authored by Ximena Soto


Print Share Comment Cite Upload Translate Updates
APA

Ximena Soto | Sciencx (2025-07-17T02:48:40+00:00) Construyendo un Sistema de E-Commerce con DDD. Retrieved from https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/

MLA
" » Construyendo un Sistema de E-Commerce con DDD." Ximena Soto | Sciencx - Thursday July 17, 2025, https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/
HARVARD
Ximena Soto | Sciencx Thursday July 17, 2025 » Construyendo un Sistema de E-Commerce con DDD., viewed ,<https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/>
VANCOUVER
Ximena Soto | Sciencx - » Construyendo un Sistema de E-Commerce con DDD. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/
CHICAGO
" » Construyendo un Sistema de E-Commerce con DDD." Ximena Soto | Sciencx - Accessed . https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/
IEEE
" » Construyendo un Sistema de E-Commerce con DDD." Ximena Soto | Sciencx [Online]. Available: https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/. [Accessed: ]
rf:citation
» Construyendo un Sistema de E-Commerce con DDD | Ximena Soto | Sciencx | https://www.scien.cx/2025/07/17/construyendo-un-sistema-de-e-commerce-con-ddd/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.