25 h · Mayo 2025 · Medellín (remoto)
- Curso de Imagina Formación.
- Formador: Kevin Mamaqi Kapllani.
- Repo: https://github.com/kevinmamaqi/curso-ddd-hexagonal-node.
Este contenido está disponible públicamente para su consulta y aprendizaje, pero no puede ser reutilizado, modificado ni distribuido con fines comerciales sin autorización expresa del autor.
Licencia: Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
Esto significa:
- ✅ Puedes ver, descargar y compartir el material con atribución al autor.
- ❌ No puedes modificarlo, adaptarlo ni crear obras derivadas.
- ❌ No puedes utilizarlo con fines comerciales (como cursos, bootcamps, o formación interna).
Para usos distintos a los permitidos por esta licencia, contacta al autor.
.
├── curso/ # 12 carpetas, una por día
│ ├── dia-01/ # markdown, ejemplos y quiz
│ ├── dia-02/
│ ├── ...
│ └── dia-12/
├── project/ # Proyecto evolutivo completo
│ ├── services/ # microservicios Node + TypeScript
│ ├── infrastructure/ # Prisma, docker-compose, etc.
│ └── diagrams/ # C4 exportados con Structurizr
├── .github/ # CI (lint, test, build, export PNG)
└── README.md # (este archivo)
| Pilar | Días | Carpeta principal |
|---|---|---|
| Arquitectura Hexagonal & DDD | 1 – 5 | curso/dia-02/ … curso/dia-05/ |
| CQRS & Event Sourcing | 6 – 7 | curso/dia-06/, curso/dia-07/ |
| Event-Driven Architecture | 8 – 9 | curso/dia-08/, curso/dia-09/ |
| Observabilidad & Dashboards | 10 | curso/dia-10/ |
| Conclusiones & Revisión final | 11-12 | curso/dia-11/, curso/dia-12/ |
| Herramienta | Versión mínima |
|---|---|
| Node.js | 20 LTS |
| npm | ≥ 10 |
| Docker & Compose | ≥ 20.10 |
| Git | ≥ 2.34 |
npm install # instala dependencias del monorepo
npm run compose:up # levanta Postgres, RabbitMQ, Prometheus, Grafana
npm run dev:order # inicia order-service con nodemon + ts-node
npm test # ejecuta vitest con coberturaZero-to-demo < 5 min en un portátil con 16 GB RAM.
| Servicio | Rol | Tech |
|---|---|---|
| order-service | Hexagonal · DDD · CQRS · ES | Node 20 + TS |
| inventory-service | Consumer de eventos, stock | Node |
| payment-service | Process Manager / Saga | Node |
| catalog-service | Puerto in-memory → Postgres | Node |
| analytics-service | Métricas de dominio | Node |
Estructura interna:
services/<svc>/
├── src/
│ ├── domain/ # Aggregates, VO, Domain Events
│ ├── application/ # Puertos + UseCases
│ ├── infrastructure/ # Adapters HTTP, DB, MQ
│ └── main.ts # Bootstrap + DI (awilix)
└── Dockerfile
| Comando | Descripción |
|---|---|
npm run dev:<svc> |
Arranca servicio con nodemon (<svc> = order, inventory…) |
npm test |
vitest + cobertura |
npm run lint |
eslint + biome |
npm run build |
tsc build de todos los servicios |
npm run compose:up / compose:down |
docker-compose con o sin volúmenes |
CI (-GitHub Actions):
- Lint + Unit Tests
- Docker build por servicio
- Exporta diagramas C4 PNG como artefactos
- Publica cobertura en SonarCloud
| URL | Credenciales |
|---|---|
http://localhost:3000 (Grafana) |
admin / admin |
http://localhost:15672 (RabbitMQ) |
guest / guest |
http://localhost:9090 (Prometheus) |
— |
Dashboard “Business KPIs” ya muestra GMV y latencia order_latency_seconds.
- Fork y clona tu copia
- Crea rama
feat/<nombre>ofix/<issue> - Commits con Conventional Commits
- Abre draft PR — revisión en vivo durante el curso
¡A diseñar software alineado al dominio! 🚀