Sistema de Eventos y Patrón Outbox
Este documento describe la arquitectura orientada a eventos implementada en Lana Bank, centrándose en el patrón de event sourcing usado dentro de las entidades de dominio y el patrón outbox usado para la publicación confiable de eventos.
Modelo Dual de Eventos
El sistema implementa un modelo dual que separa los eventos internos de entidad de los eventos de dominio externos. Esta separación permite una integración confiable entre contextos acotados manteniendo una estricta consistencia dentro de cada dominio.
Eventos de Entidad vs Eventos de Dominio
| Tipo de Evento | Propósito | Alcance | Ejemplos |
|---|---|---|---|
| Eventos de Entidad | Cambios de estado internos | Un único agregado | CreditFacilityEvent::Initialized, ObligationEvent::DueRecorded |
| Eventos de Dominio | Eventos de negocio para consumo externo | Integración entre dominios | CoreCreditEvent::FacilityActivated, CoreCreditEvent::ObligationDue |
Los eventos de entidad se persisten como fuente de la verdad mediante event sourcing. Los eventos de dominio se derivan y publican a través del patrón outbox.
Event Sourcing para Entidades
Arquitectura de Event Sourcing
┌──────────────────┐
│ Business Command │
└────────┬─────────┘
│
▼
┌──────────────────┐ ┌──────────────────┐
│ Domain Entity │───▶│ Entity Events │
│ (execute logic) │ │ push(new_event) │
└────────┬─────────┘ └────────┬─────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Repository │ │ Domain Publisher│
│ update_in_op() │ │ publish() │
└────────┬─────────┘ └────────┬─────────┘
│ │
▼ ▼