Come interrogare l'aggregazione radice per reagire all'evento da altro AR

6

Voglio creare un piccolo programma di localizzazione GPS. Semplificato: gli utenti possono creare tracce. Per rendere le cose in scala Traccia e Utente sono due AR distinti. La traccia contiene un AuthorUser a cui fa riferimento UserID.

Si applicano le seguenti regole:

  1. Un utente può creare una quantità illimitata di tracce.

  2. Gli utenti possono essere rimossi dal sistema. In tal caso è necessario rimuovere tutte le tracce dell'utente dell'utente.

Voglio usare DDD + ES per questo. Sapendo che gli AR possono essere creati / caricati solo da ID, come devo cancellare / modificare tutti i Tracce quando viene attivato un UserRemovedEvent?

Si noti che il modello di query è completamente disaccoppiato e potrebbe essere ritardato poiché è aggiornato in base agli eventi asincroni.

    
posta Pepster 21.10.2015 - 15:09
fonte

1 risposta

3

Da quello che posso vedere, la risposta a ciò che hai chiesto è una Saga: stai creando transazioni per più Roots aggregati diversi, quindi nessun AR ha la responsabilità di tutto ciò. La Saga utilizza l'ID utente per interrogare TracksRepository / Projection per l'elenco di tracce da rimuovere e le enumera. Nota che la Saga si basa solo sull'API del modello: ascolta gli eventi e invia i comandi alle tracce, ma non ha conoscenza degli interni di nessuno dei due.

Si noti qui l'ipotesi: se si tratta di radici aggregate diverse, queste verranno modificate in limiti di transazione diversi e si otterrà solo una coerenza "finale". Assicurati quindi che tu e i tuoi esperti del dominio concordiate quale sia il vero requisito di latenza.

    
risposta data 23.10.2015 - 17:24
fonte

Leggi altre domande sui tag