Sto cercando di conoscere l'event sourcing per la potenziale applicazione a un sistema di prenotazione che sto costruendo - Penso di aver compreso i concetti chiave, ma ho difficoltà a capire come gestire i casi in cui gli aggiornamenti a più aggregati / flussi sono richiesto.
Nel mio caso ho modellato due aggregati: Eventi, che tracciano il numero di posti disponibili e Prenotazioni per uno o più posti a un singolo evento che registrano dettagli sui partecipanti. Tutto ciò che ho letto indica che una transazione dovrebbe aggiornare solo un singolo aggregato, tuttavia quando si salva una prenotazione devo aggiornare sia l'evento per tenere traccia dei posti rimanenti all'evento, sia la prenotazione per registrare le modifiche ai dettagli del partecipante. Ciò crea il potenziale di incoerenza:
- Se aggiorno la prenotazione prima dell'evento, devo gestire il caso in cui l'aggiornamento all'evento fallisce perché i posti non sono più disponibili (questo accade anche se aggiungo un passaggio "Riservare i posti per i prossimi 10 minuti" , perché ad un certo punto devo aggiornare i dettagli della prenotazione e confermare i posti).
- Viceversa se aggiorno l'evento prima devo gestire casi in cui qualcuno è riuscito a modificare contemporaneamente la prenotazione e c'è un conflitto.
- In entrambi i casi, un errore imprevisto lascerà inconcludenti la prenotazione e l'evento e non sono sicuro di come potrei gestirlo.
Ho provato a esaminare come vengono gestiti problemi simili in altri domini (ad es. trasferimento di denaro tra conti ), ma non sono al 100% chiaro su come queste strategie assicurino "coerenza finale", e quindi non sono sicuro di come applicarlo nel mio caso.
Come devono essere gestiti gli aggiornamenti a più aggregati collegati?