17. Eventos de dominio: hechos importantes que ya ocurrieron

17.1 Introducción

Un evento de dominio es un hecho importante para el negocio que ya ocurrió. No expresa una intención futura ni una orden pendiente, sino algo que el dominio considera relevante y que puede tener consecuencias. Por ejemplo: Turno reservado, Turno cancelado, Paciente ausente, Agenda publicada, Pedido confirmado o Pago registrado.

Los eventos ayudan a entender cómo cambia el dominio a lo largo del tiempo. También permiten descubrir reglas, consecuencias, integraciones, notificaciones, historial y procesos que se inician después de que algo ocurre.

17.2 Imagen conceptual de eventos de dominio

Eventos de dominio como hechos importantes ya ocurridos que conectan acciones, estados, reglas y consecuencias del negocio

17.3 Qué es un evento de dominio

Un evento de dominio representa algo que sucedió y que tiene significado dentro del negocio. Debe nombrarse en pasado porque describe un hecho ya ocurrido. Por ejemplo, "Turno reservado" es un evento; "Reservar turno" es una acción o comando.

Un evento de dominio es un hecho pasado, relevante para el negocio y capaz de producir consecuencias dentro del modelo.

No todo cambio técnico es un evento de dominio. "Registro insertado" o "campo actualizado" pueden ser eventos técnicos, pero no necesariamente tienen significado para los expertos del negocio.

17.4 Por qué los eventos son importantes

Los eventos permiten reconstruir la historia del dominio. Si sabemos que un turno fue reservado, confirmado, cancelado o marcado como ausente, podemos entender qué pasó y por qué el objeto está en su estado actual.

También permiten descubrir consecuencias. Cuando ocurre Turno cancelado, quizás se libera una franja horaria, se envía una notificación, se registra una penalización o se habilita una lista de espera. Un evento importante rara vez queda aislado.

17.5 Eventos frente a comandos

Un comando expresa una intención de hacer algo. Un evento expresa que algo ya ocurrió. "Reservar turno" es un comando o acción solicitada. "Turno reservado" es el evento resultante si la acción fue aceptada por el dominio.

Esta diferencia es importante porque un comando puede fallar. Un paciente puede intentar reservar un turno, pero la reserva puede rechazarse si la franja ya está ocupada. En ese caso no ocurrió Turno reservado.

17.6 Eventos frente a estados

Un estado describe la situación actual de un objeto. Un evento describe algo que ocurrió en un momento. "Reservado" puede ser el estado actual de un turno. "Turno reservado" es el hecho que llevó al turno a ese estado.

Un mismo estado puede alcanzarse por distintos caminos. Por eso, los eventos son útiles para conservar historia y explicar cómo se llegó a una situación.

17.7 Cómo nombrar eventos

Los eventos deben nombrarse con el lenguaje del dominio y en tiempo pasado. Algunos ejemplos:

Turno reservado
Turno confirmado
Turno cancelado
Paciente ausente registrado
Agenda publicada
Pago registrado

Evitemos nombres técnicos como "UpdateTurnoEjecutado" o "InsertAgendaOK". Esos nombres hablan de implementación, no del dominio.

17.8 Qué información puede contener un evento

Un evento puede incluir la información necesaria para entender el hecho ocurrido. Por ejemplo, Turno cancelado puede registrar fecha de cancelación, motivo, usuario que canceló y si fue dentro o fuera de término.

No siempre debe contener todos los datos del objeto relacionado. Debe incluir lo necesario para interpretar el evento, aplicar consecuencias, auditar o comunicar el hecho según las necesidades del dominio.

17.9 Eventos y consecuencias

Muchos eventos disparan consecuencias. Cuando ocurre Pago registrado, un pedido puede pasar a pagado. Cuando ocurre Turno cancelado, puede liberarse una franja. Cuando ocurre Paciente ausente registrado, puede incrementarse un contador de inasistencias.

En análisis de dominio, conviene preguntar: ¿qué debe ocurrir después de este evento?, ¿quién necesita enterarse?, ¿qué reglas se activan?, ¿qué historial debe quedar?

17.10 Eventos y comunicación entre áreas

Un evento puede ser importante para más de un área del negocio. Por ejemplo, cuando un turno se cancela, recepción puede necesitar liberar la agenda, el paciente puede recibir una notificación y administración puede registrar una penalización si corresponde.

Modelar eventos ayuda a descubrir estas conexiones. También evita que un proceso quede oculto dentro de una única pantalla o función técnica.

17.11 Eventos en entrevistas y documentos

Los eventos suelen aparecer en frases como "cuando ocurre", "después de", "una vez que", "al confirmarse", "si se cancela" o "cuando vence". Estas expresiones indican hechos que pueden cambiar el estado del dominio o iniciar nuevos procesos.

Por ejemplo, la frase "Cuando el paciente cancela fuera de término, se registra una inasistencia" revela al menos dos eventos posibles: Turno cancelado e Inasistencia registrada.

17.12 Ejemplo: reserva de turno

En una reserva de turno podemos distinguir varios elementos:

  • Comando: Reservar turno.
  • Reglas previas: la franja debe estar disponible y el paciente debe estar habilitado.
  • Evento resultante: Turno reservado.
  • Estado posterior: Turno en estado reservado.
  • Consecuencias: bloquear la franja, enviar confirmación o registrar historial.

17.13 Tabla de ejemplos

La siguiente tabla muestra eventos y posibles consecuencias:

Evento Qué significa Posibles consecuencias
Turno reservado Un paciente obtuvo una franja de atención. Bloquear franja, enviar confirmación.
Turno cancelado Un turno dejó de estar reservado o confirmado. Liberar franja, notificar, evaluar penalización.
Paciente ausente registrado El paciente no asistió a un turno previsto. Actualizar historial, aplicar política de inasistencias.
Agenda publicada La agenda quedó disponible para reservar turnos. Mostrar horarios, habilitar reservas.
Pago registrado Se reconoció un pago válido. Actualizar estado, emitir comprobante.

17.14 Eventos y auditoría

Algunos eventos tienen valor de auditoría. Permiten saber qué ocurrió, cuándo, por quién y con qué motivo. Esto puede ser importante en dominios médicos, financieros, legales, administrativos o comerciales.

No todo evento necesita conservarse con el mismo nivel de detalle. El modelo debe distinguir qué hechos son relevantes para el negocio y cuáles son solo detalles técnicos sin valor histórico.

17.15 Eventos y reglas temporales

Los eventos suelen estar ligados al tiempo. Fecha y hora del evento pueden ser fundamentales para aplicar reglas. Una cancelación puede ser dentro o fuera de término según el momento en que ocurrió. Un pago puede ser válido si se registró antes del vencimiento. Una confirmación puede expirar si no ocurre a tiempo.

Por eso, cuando un evento afecta reglas temporales, conviene registrar con precisión cuándo ocurrió y qué reloj o referencia temporal usa el dominio.

17.16 Preguntas para descubrir eventos

Estas preguntas ayudan a identificar eventos de dominio:

  • ¿Qué hechos importantes necesita recordar el negocio?
  • ¿Qué ocurre después de completar una acción?
  • ¿Qué cambios de estado deben quedar registrados?
  • ¿Qué hechos disparan notificaciones, cálculos o decisiones?
  • ¿Qué eventos interesan a otras áreas o sistemas?
  • ¿Qué datos se necesitan para auditar lo ocurrido?
  • ¿Qué hechos se mencionan con frases como "cuando ocurrió" o "después de"?

17.17 Errores frecuentes

Al modelar eventos de dominio, suelen aparecer estos errores:

  • Nombrar eventos en infinitivo, como si fueran comandos.
  • Confundir eventos con estados actuales.
  • Registrar eventos técnicos sin significado de negocio.
  • No identificar consecuencias posteriores al evento.
  • No guardar datos necesarios para auditoría o reglas temporales.
  • Crear eventos para cualquier cambio menor sin valor para el dominio.
  • No validar con expertos qué hechos realmente importan.

17.18 Qué debes recordar de este tema

  • Un evento de dominio es un hecho importante que ya ocurrió.
  • Debe nombrarse en pasado y con lenguaje del negocio.
  • Un comando expresa intención; un evento expresa resultado ocurrido.
  • Un estado describe situación actual; un evento describe historia.
  • Los eventos pueden disparar reglas, notificaciones, cambios de estado y procesos.
  • Algunos eventos tienen valor de auditoría o importancia temporal.
  • Los eventos ayudan a comprender mejor la dinámica del dominio.

17.19 Conclusión

Los eventos de dominio permiten representar hechos relevantes que ya ocurrieron y que pueden cambiar el estado del modelo, iniciar consecuencias o dejar historial. Son una herramienta poderosa para comprender procesos, descubrir reglas y conectar áreas del negocio.

En el próximo tema compararemos comandos, consultas y eventos para distinguir intención, lectura y resultado dentro del modelo de dominio.