La parola Event in Event Sourcing e la stessa parola Event in pub/sub non hanno nulla a che spartire, sono per puro caso la stessa sequenza di 5 lettere.

La definizione più bella che ho sentito di Event Sourcing è:

Perfect in lock free domain models, in high contention domains.

Un Domain Event:

  • Non lascia il bounded context a cui appartiene l’aggregato che lo genera
  • Se lo pensiamo in termini C# potrebbe essere tranquillamente una classe/interfaccia internal;
  • È ricco di informazioni, ergo contiene tutte le informazioni necessarie per ricostruire lo stato dell’aggregato

Un Event:

  • È disegnato per attraversare i confini del bounded context;
  • In termini C# è un’interfaccia public in un assembly condiviso;
  • Le informazioni contenute sono ridotte all’osso, con lo scopo principale di ridurre all’osso l’accoppiamento, e spesso si limitano al nome dell’evento e ad uno o più identificatori univoci, URI, chiavi primarie, etc…

Fate un favore a voi stessi non mandate in giro i Domain Event, tecnicamente si può fare, ma alla lunga, con il crescere del sistema vi si rivolterà contro rendendo di fatto il sistema un enorme monolite difficilissimo da evolvere.