Ho studiato DDD e ho sperimentato Event Sourcing come meccanismo di archiviazione.
Prima di questo (principalmente applicazioni in stile CRUD con modelli anemici di dati archiviati in DB relazionali), una "best practice" che ho cercato di tenere a mente è di disaccoppiare il mio modello di dati da eventuali problemi di persistenza.
Tuttavia, ho cercato di capire come farlo con Event Sourcing. Sembra che gli oggetti del mio modello di dominio debbano conoscere gli eventi e generarli da soli, e sapere come ricostruire il loro stato da un flusso di eventi.
L'unico modo in cui posso pensare è che i miei repository ricostruiscano gli oggetti di dominio dagli eventi, e quindi eseguono alcuni elaborati rilevamenti delle modifiche per generare eventi risultanti. Sembra che sarebbe inutilmente complicato e soggetto a errori, così come risulterebbe nella logica del dominio che vive o viene duplicata nelle classi del repository.
O il mio pensiero su questo è tutto sbagliato e dovrei considerare gli eventi come parte del modello di dominio? In questo modo, gli oggetti di dominio che generano eventi e ricostruiscono lo stato dagli eventi hanno molto più senso, e quindi storage & il recupero degli eventi sarebbe un problema di persistenza e sarà implementato al di fuori del livello del dominio.