Skip to main content

Observer

Observer es un patrón para modelar reacciones a hechos, permitiendo que múltiples comportamientos respondan a un cambio sin acoplar al productor con los consumidores.

👉 No es “notificar objetos”,

👉 es propagar cambios de estado del dominio sin violar el diseño.

¿Se usa hoy en arquitectura hexagonal?​

Sí, pero no como en GoF.

En hexagonal:

  • Se usa como Domain Events + Listeners
  • Vive principalmente en Domain / Application
  • Infrastructure solo consume los eventos

⚠️ Si tu Observer depende de Spring, Kafka o Mail → está mal ubicado.

Cómo se implementa hoy (vs GoF)​

GoF clásico

  • Observable
  • Observer
  • addObserver()
  • notifyObservers()

Hoy

  • DomainEvent
  • EventPublisher
  • EventListener
  • Registro explícito en el wiring

👉 Más explícito

👉 Más testeable

👉 Sin herencia forzada

👉 Sin magia

Anti-ejemplo típico​

“Cuando se aprueba algo, llamo directamente a emailService, auditService y metricsService”

Por qué está mal:

  • Alto acoplamiento
  • Violación SRP
  • Dominio dependiente de infraestructura
  • Cambios triviales rompen todo

Otro clásico:

Usar ApplicationEventPublisher dentro del dominio

Reemplazo​

No se reemplaza, se refina.

Según el contexto:

  • Domain Events → mismo concepto, mejor nombre
  • EventBus → Observer a escala
  • Messaging (Kafka/Rabbit) → Observer distribuido

⚠️ No reemplaces Observer con:

  • if/else
  • switch
  • @TransactionalEventListener en el dominio

Ejemplo​

Evento: AuthorizationApproved

Observers:

  • Notificación al paciente
  • Auditoría
  • Métricas

El dominio:

  • Publica el evento
  • No sabe quién escucha
  • No le importa cómo reaccionan

👉 Eso es Observer bien aplicado.

👉 Ver implementación completa en GitHub: https://github.com/MaxiCorrea/java-observer

Regla de oro​

El que produce el evento no debe conocer jamás a los que reaccionan.

Si los conoce:

  • No es Observer
  • Es acoplamiento disfrazado

Frase final​

Observer no es un patrón de notificación, es un patrón de desacacople.

Si lo usás para “avisar cosas”, sos JR.

Usalo para proteger el dominio.

Ver video​

Observer in Java