DEV Community

Ximena Soto
Ximena Soto

Posted on • Edited on

Armando un Sistema de E-Commerce con DDD, Java y Algunos Tropiezos Épicos

Imagina esto: un desarrollador de Java, un teclado, y la loca idea de construir algo genial con Domain-Driven Design (DDD). Esa soy yo, lanzándome de cabeza a DddEcommerceOrders, un sistema de e-commerce que es mitad ambición, mitad cafeína, y un toque de “¿por qué no funciona esto?”. Este proyecto, alojado en https://github.com/xsoto-developer/DddEcommerceOrders, es mi patio de juegos para dominar Java, Spring Boot y microservicios, con un guiño a mis primeros pasos en DevOps y mi aventura hacia AWS. Prepárate, geeks tecnológicos, porque voy a contarte los aciertos, desaciertos y momentos de comedia de este viaje, con la esperanza de encender tu curiosidad y sacarte una sonrisa.

El Gran Plan: Crear un Imperio de E-Commerce (Más o Menos)

Quise construir DddEcommerceOrders, un sistema basado en microservicios para gestionar pedidos e inventario en una tienda online imaginaria. Piensa en “Amazon, pero codedado por una soñadora en pijama que ama DDD”. El proyecto se divide en dos microservicios:

  • orders-service: Maneja el caos de crear pedidos, confirmar pagos y cancelarlos cuando alguien pide 500 suéteres para gatos por error.
  • inventory-service: Controla el stock, porque vender laptops imaginarios no es buen negocio.

Cada microservicio sigue una arquitectura limpia—Dominio, Aplicación, Infraestructura—porque me gusta complicarme la vida con estilo. Está construido con Java 17, Spring Boot 3.2.0, y un toque de magia DDD para mantener todo en orden.

¿Qué Hay en la Caja?

  • Líos de Pedidos: Crear pedidos, confirmar pagos y cancelarlos cuando el cliente se arrepiente de su obsesión por los suéteres felinos.
  • Magia de Inventario: Reservar stock al confirmar pedidos, usando eventos de dominio para no vender cosas que no existen.
  • Swagger con Actitud: Documentación interactiva de APIs en /swagger-ui.html—porque presionar botones para probar endpoints es puro amor.
  • Pruebas a Tope: Tests unitarios con JUnit 5 para que mi código no se desmorone como galleta en café.
  • CI/CD con Estilo: Un pipeline de GitHub Actions que compila y prueba como jefe, mostrando mis primeros coqueteos con DevOps.

El Baile DDD: Pasos Bien Dados y Algún Pisotón

DDD es como coreografiar un baile entre la lógica de negocio y el código, y yo aún estoy aprendiendo a no pisarme los pies. DddEcommerceOrders se divide en dos Bounded Contexts:

  1. Gestión de Pedidos:
    • Protagonista: El agregado Pedido, haciendo malabares con LineaDePedido (artículos) y Direccion (dónde enviar esos suéteres para gatos).
    • Frases Pegajosas: “Confirmar pedido”, “cancelar pedido”—mi código habla el mismo idioma que el negocio.
    • Truco Estelar: Lanza un OrderConfirmedEvent para gritarle al servicio de inventario, “¡Oye, reserva stock!”
  2. Gestión de Inventario:
    • Estrella Principal: El agregado Producto, con su fiel compañero Stock.
    • Palabras Clave: “Reservar stock”, “liberar stock”—porque un almacén vacío es pura tristeza.
    • Modo Ninja: Escucha el OrderConfirmedEvent para actualizar el stock sin hacer ruido.

Aquí tienes un vistazo al Bounded Context de Gestión de Pedidos, dibujado en Mermaid porque soy así de extra:

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
Enter fullscreen mode Exit fullscreen mode

Los Detalles Techies: Donde Brillamos (y Tropezamos)

Java y Spring Boot: Mis Fieles Compinches

Con Java 17 y Spring Boot 3.2.0, construí un sistema robusto pero con personalidad. Algunos highlights:

  • Arquitectura Limpia: Manteniendo la lógica de dominio pura, lejos del caos de la infraestructura.
  • Base de Datos H2: Una base en memoria porque aún no estoy listo para pelear con bases de datos de producción.
  • Swagger con Drama: Añadí Swagger para documentar APIs, sintiéndome un genio… hasta que no funcionó (sigue leyendo).
  • Eventos de Dominio: Usé ApplicationEventPublisher de Spring para que los microservicios charlen sin ponerse pegajosos.

DevOps a Media Máquina

Soy un novato en DevOps, pero configuré un pipeline de GitHub Actions para compilar, probar y lucir mis habilidades CI/CD. Es como enseñarle a un robot a revisar mi tarea—bastante genial cuando funciona.

Sueños con AWS

El proyecto corre localmente, pero estoy estudiando para certificaciones AWS. Pronto desplegaré esta bestia en la nube, tal vez en ECS o EKS, para demostrar que puedo jugar en las grandes ligas.

Los Momentos “Facepalm”: Aprendiendo a Puro Golpe

El camino del coder es una mezcla de “¡Eureka!” y “¿Por qué, universo, por qué?”. Aquí van mis mejores tropiezos:

  • Swagger Rebelde: Añadí Swagger con orgullo, solo para que me mirara con un “No operations defined in spec!”. Resulta que mis controladores jugaban al escondite con Springdoc. Un @Tag y algo de logging DEBUG los pusieron en su lugar.
  • Fiesta Vacía en H2: Intenté reservar stock con curl y me dio un “Producto no encontrado”. Mi base H2 estaba más vacía que mi taza de café a las 3 de la mañana. Un script data.sql con productos dummy salvó el día.
  • DDD Sobrepensado: Pasé horas debatiendo si Stock debía ser una entidad o un value object. Spoiler: Es un value object, y me compliqué la vida por nada.

Estos deslices me enseñaron a abrazar el caos, depurar como detective, y reírme cuando mi código decide tomarse un descanso.

¡Pruébalo, Coder Valiente!

¿Listo para meterte en este lío? Explora DddEcommerceOrders en https://github.com/xsoto-developer/DddEcommerceOrders. Aquí va cómo arrancar:

  1. Clona el repo:
   git clone https://github.com/xsoto-developer/DddEcommerceOrders.git
Enter fullscreen mode Exit fullscreen mode
  1. Lanza los microservicios:
   cd orders-service
   mvn clean install
   mvn spring-boot:run
   cd ../inventory-service
   mvn clean install
   mvn spring-boot:run
Enter fullscreen mode Exit fullscreen mode
  1. Juega con Swagger:
    • Pedidos: http://localhost:8080/swagger-ui.html
    • Inventario: http://localhost:8081/swagger-ui.html
  2. Espía en H2:
    • Ve a http://localhost:8081/h2-console (JDBC URL: jdbc:h2:mem:inventorydb, User: sa, Password: vacío).
    • Corre SELECT * FROM PRODUCTO; para fisgonear el stock.

Consejo pro: Si Swagger se pone rebelde, revisa los logs de org.springdoc o dale un buen mvn clean install para calmarlo.

¿Qué Sigue para Este Domador de Código?

Estoy enganchado a programar y aprender, así que esto es lo que viene:

  • Aventura AWS: Desplegar este proyecto en AWS para mostrar que puedo domar la nube.
  • DevOps a Fondo: Más Docker, Kubernetes, y tal vez Terraform para darle sabor.
  • Líos Open-Source: Contribuir a proyectos para unirme a la fiesta global de coders.

¡Hagamos Travesuras Tecnológicas!

¿Tienes algo que decir sobre DddEcommerceOrders? ¿Te gustó el diagrama UML? ¿Odias mi obsesión con suéteres para gatos? Pásate por https://github.com/xsoto-developer/DddEcommerceOrders, pruébalo y comparte tu sabiduría. Si eres un techie o reclutador buscando un entusiasta de Java/DDD/DevOps con talento para aprender (y algún que otro facepalm), ¡charlemos—estoy listo para construir algo épico!


Gracias por acompañarme en esta montaña rusa de código. Sigue hackeando, sigue riendo, ¡y no pidas 500 suéteres para gatos!

Este artículo también está disponible en: Inglés

Top comments (0)