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.