Capítulo 4 — DDD, Arquitectura Hexagonal y Eventos de Dominio
El capítulo anterior presentó el módulo de descripciones como una primera toma de contacto con las convenciones arquitectónicas de DWall. El módulo se implementó siguiendo esas convenciones — capas hexagonales, bounded contexts, eventos de dominio — sin haber estudiado aún el fundamento teórico detrás de cada decisión.
Este capítulo cierra esa brecha. Su objetivo es explicar con rigor los principios que sustentan la arquitectura de DWall, utilizando el módulo de descripciones como ejemplo vivo. Cada concepto se ilustra, siempre que sea posible, con código real extraído del repositorio.
El estudio de estos principios no fue académico por capricho: las siguientes fases del TFG lo exigieron. La implementación del módulo de embeddings vectoriales (capítulo 5) requirió comprender cómo un bounded context reacciona a eventos publicados por otro. La integración SharePoint RAG (capítulo 6) se apoyó en proyecciones event-driven para mantener los documentos indexados. El agente orquestador (capítulo 7) usa arquitectura hexagonal para desacoplar la lógica del routing de sus adaptadores.
El módulo de descripciones como hilo conductor
dwall-module-description es intencionadamente sencillo: almacena textos descriptivos asociados a recursos de DWall (variables, reglas, usuarios…). Su lógica de negocio es mínima. Lo que lo hace valioso como ejemplo de DDD no es lo que hace, sino cómo lo hace y, sobre todo, cómo se relaciona con el resto del sistema:
- Es un bounded context autónomo que no lee datos de otros módulos directamente.
- Mantiene tablas mirror (proyecciones) con solo los campos que necesita de otros contextos.
- Esas proyecciones se mantienen sincronizadas mediante eventos de dominio, lo que elimina el acoplamiento directo entre módulos.
Esta estructura es un caso de libro de CQRS y comunicación entre contextos. Se analizará en detalle en las últimas secciones del capítulo.
Estructura del capítulo
| Sección | Concepto central |
|---|---|
| 01 -- Arquitectura Hexagonal | Capas, puertos y adaptadores, inversión de dependencias |
| 02 -- Bounded Contexts y Módulos | Contextos delimitados, módulos, independencia entre dominios |
| 03 -- Value Objects y Agregados | Bloques de construcción del dominio: VO, Entidad, Aggregate Root |
| 04 -- Eventos de Dominio | Record vs publish, EventBus como puerto, listeners en Spring |
| 05 -- CQRS y Proyecciones | Modelo de escritura vs lectura, proyecciones event-driven |
| 06 -- Cierre | Balance del aprendizaje y relación con el resto del TFG |