Ejemplo de aplicación orientada a eventos en el dominio de las reservas de teatro.
-
Un caso de uso de notificación cuando se concede un descuento.
Clasecom.autentia.tutoriales.reservas.teatro.DescuentoService
en el móduloreservas-teatro-notificacion
.
Ver el test. -
Un caso de uso de ECST cuando se seleccionan butacas para una reserva.
Clasecom.autentia.tutoriales.reservas.teatro.command.RepresentacionCommandService
en el móduloreservas-teatro-ecst
.
Ver el test. -
Una implementación completa de toda la lógica de negocio con Event Sourcing y CQRS.
Todo esto está en el móduloreservas-teatro-es
.
Hay un test de varias partes del proceso.
No incluye adaptador HTTP REST para comandos y consultas.
Los adaptadores de event journal, persistencia de entidades y pasarela de pagos son "fakes" en memoria.
Están en el módulo reservas-teatro-infra
.
En ese mismo módulo hay un task scheduler (también en memoria) y dos implementaciones de command dispatcher:
un single-writer usando synchronized
de Java y otro que implementa OCC (Optimistic Concurrency Control).
También en ese módulo están las interfaces básicas de DDD, CQRS y ES: AggregateRoot
, Entity
, Command
y Event
.
- Comandos y modelo de escritura, agrupados por agregada.
Cada agregada es un paquete. - Interior de la agregada Cliente: clases de entidad, clases de comando, clase con el consumidor propio de la agregada y una clase de contexto de apoyo.
- Como los eventos son elementos de primer nivel en Event Sourcing,
se han extraído a su propio paquete
event
y están agrupados por agregada.
Aquí se ven los de Cliente. - Modelo de lectura de ejemplo: un histórico de las reservas hechas por cada cliente.
- Saga del proceso de reserva.
Contiene consumidores de eventos y elEstadoProceso
persistente.