Event Sourcing: Registro Inmutable de Eventos de Dominio

PUBLICADO: 2026-07-25
AUTOR: MANUEL PRIETO
Arquitectura de Software

Event SourcingEvent SourcingPatrón de arquitectura en el que los cambios en el estado de una aplicación se almacenan como una secuencia inmutable de eventos de dominio ordenados en el tiempo. En lugar de guardar únicamente el estado actual en una base de datos tradicional, el sistema puede reconstruir cualquier estado pasado o presente recalculando la lista completa o instantánea (snapshot) de dichos eventos. es un patrón arquitectónico fundamental que transforma la forma en que los sistemas gestionan la persistencia de datos. En lugar de almacenar únicamente el estado actual de una entidadEntidad (Entity)El núcleo inamovible de la lógica de negocio en la Arquitectura Limpia. Una Entidad encapsula las reglas y datos empresariales más fundamentales y generales (las reglas de negocio críticas). Pueden ser objetos con métodos o un conjunto de estructuras de datos y funciones, y son completamente ajenas a cualquier cambio externo, como modificaciones en la base de datos, en el sistema de vistas o en el framework de desarrollo. mediante sentencias UPDATE de SQL, el sistema registra cada cambio como una secuencia cronológica e inmutable de eventos de dominio.

Este enfoque imita el funcionamiento natural de los libros de contabilidad bancarios: el saldo actual de una cuenta no se guarda de forma aislada, sino que se calcula sumando y restando todas las transacciones históricas registradas.

1. El Concepto de Event Store

En una arquitectura de Event SourcingEvent SourcingPatrón de arquitectura en el que los cambios en el estado de una aplicación se almacenan como una secuencia inmutable de eventos de dominio ordenados en el tiempo. En lugar de guardar únicamente el estado actual en una base de datos tradicional, el sistema puede reconstruir cualquier estado pasado o presente recalculando la lista completa o instantánea (snapshot) de dichos eventos., el componente central de persistencia es el Event Store (Almacén de Eventos).

Un Event Store es una base de datos de solo lectura y adición (append-only). Los eventos almacenados nunca se modifican ni se eliminan; representan hechos del pasado que ocurrieron de forma definitiva en el dominio de negocio (OrderCreated, PaymentReceived, ItemShipped).

Cargando diagrama...

2. Reconstrucción del Estado y Snapshots

Para conocer el estado actual de una entidadEntidad (Entity)El núcleo inamovible de la lógica de negocio en la Arquitectura Limpia. Una Entidad encapsula las reglas y datos empresariales más fundamentales y generales (las reglas de negocio críticas). Pueden ser objetos con métodos o un conjunto de estructuras de datos y funciones, y son completamente ajenas a cualquier cambio externo, como modificaciones en la base de datos, en el sistema de vistas o en el framework de desarrollo. o agregado, el sistema lee todos los eventos asociados a su identificador único desde el Event Store y los aplica secuencialmente en memoria.

El Desafío del Rendimiento: Snapshots

Cuando un agregado acumula miles de eventos a lo largo de los años, recalcular su estado completo desde el primer evento resultaría ineficiente. Para solucionar esto, el patrón utiliza Instantáneas (Snapshots):

  1. Cada cierto número de eventos (ej. cada 100 eventos), el sistema guarda una foto del estado actual del agregado.
  2. Para reconstruir el agregado, el sistema recupera la última instantánea disponible y solo procesa los eventos ocurridos con posterioridad a dicha foto.

3. Beneficios Clave de Event Sourcing

  • Auditoría e Historial Inmutable: Permite saber no solo cuál es el estado actual del sistema, sino exactamente cómo, cuándo y por qué se llegó a dicho estado.
  • Viaje en el Tiempo (Time Travel Debugging): Hace posible reproducir el estado del sistema en cualquier punto del pasado para auditar fallos o analizar patrones de uso.
  • Integración Natural con CQRS: La secuencia de eventos del Event Store alimenta directamente a los proyectores del modelo de lectura en arquitecturas CQRSCQRS (Command Query Responsibility Segregation)Segregación de Responsabilidad de Comandos y Consultas. Es un patrón de arquitectura que separa explícitamente las operaciones de modificación de estado (Comandos, como crear o actualizar datos) de las operaciones de lectura (Consultas). Esta separación permite optimizar y escalar de forma independiente los modelos de datos de lectura y escritura, mejorando el rendimiento y la seguridad en sistemas complejos..
  • Desacoplamiento en Microservicios: Los eventos generados sirven como fuente de verdad para la comunicación asíncrona entre Microservicios.

4. Consideraciones e Integración con Arquitectura Limpia

Aunque Event SourcingEvent SourcingPatrón de arquitectura en el que los cambios en el estado de una aplicación se almacenan como una secuencia inmutable de eventos de dominio ordenados en el tiempo. En lugar de guardar únicamente el estado actual en una base de datos tradicional, el sistema puede reconstruir cualquier estado pasado o presente recalculando la lista completa o instantánea (snapshot) de dichos eventos. ofrece ventajas sobresalientes en la trazabilidad y la escalabilidad, introduce desafíos como la evolución del esquema de eventos (versionado de eventos) y la complejidad infraestructural.

En la Arquitectura Limpia, el Event Store actúa como un detalle de implementación de la capa de infraestructura, manteniendo las reglas de negocio del agregado puras y aisladas en la capa de dominio.