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:
-
Gestión de Pedidos:
-
Protagonista: El agregado
Pedido
, haciendo malabares conLineaDePedido
(artículos) yDireccion
(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!”
-
Protagonista: El agregado
-
Gestión de Inventario:
-
Estrella Principal: El agregado
Producto
, con su fiel compañeroStock
. - 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.
-
Estrella Principal: El agregado
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
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 loggingDEBUG
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 scriptdata.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:
- Clona el repo:
git clone https://github.com/xsoto-developer/DddEcommerceOrders.git
- Lanza los microservicios:
cd orders-service
mvn clean install
mvn spring-boot:run
cd ../inventory-service
mvn clean install
mvn spring-boot:run
- Juega con Swagger:
- Pedidos:
http://localhost:8080/swagger-ui.html
- Inventario:
http://localhost:8081/swagger-ui.html
- Pedidos:
- 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.
- Ve a
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)