Domanda

Attualmente sto elaborando un concetto per una suite di collaborazione (principalmente) basata su HTML che ho intenzione di implementare utilizzando CQRS. Questo software conterrà messaggi che possono essere inviati all'utente (che possono essere letti o non letti, ovviamente) e altri elementi che saranno contrassegnati come "nuovi" se creati dopo l'ultimo accesso dell'utente. Difficilmente qualcosa di nuovo, ma non sono abbastanza sicuro di come sarebbe stato implementato correttamente utilizzando CQRS. A quanto ho capito, il cambiamento di qualsiasi tipo dovrebbe, senza eccezioni, essere possibile solo tramite comandi. Ma la creazione di comandi per ogni singolo (nuovo) elemento a cui si accede sembra un po 'troppo, per non parlare dell'overhead. Non so se ne ho bisogno, ma quale sarebbe il modo migliore per implementare un Timestamp Last-Accessed sugli elementi. Fondamentalmente lo stesso problema come sopra, con la differenza che la modifica avviene OGNI volta che si accede all'elemento, non solo la prima volta per ogni utente.

CQRS sembra essere un concetto fantastico, ma ha davvero bisogno di più materiale didattico. Non vedo l'ora che venga pubblicato un libro :)

Saluti

[Modifica] Nessuno? Non avrei mai pensato che fosse una questione così complicata ..

È stato utile?

Soluzione

Presumo che tu stia utilizzando il sourcing di eventi, nel qual caso una volta che permetti ai tuoi servizi di query / gestori di eventi di generare eventi appropriati, questo diventa abbastanza facile da risolvere.

Per i tuoi messaggi / elementi; quando gestisci gli eventi di creazione specifici dei tuoi elementi aggiungili a gestori di eventi esistenti o crei altri gestori di eventi, per archiviarli in un modello di lettura di messaggi con uno stato di nuovo e informazioni appropriate sull'elemento.

Come parte del tuo accesso utente, non vedo perché non puoi generare un evento di accesso utente (dal servizio di sicurezza / query a seconda di come la tua autenticazione di implementazione) per dire che l'utente ha effettuato l'accesso Un gestore di eventi potrebbe catturarlo e scrivere il timestamp dell'ultimo accesso in uno specifico modello di lettura dell'ultimo accesso dell'utente.

Inoltre, il gestore di eventi che ha eseguito l'accesso dall'utente dovrà aggiornare tutti i nuovi messaggi (per quell'utente) a uno stato non letto . Visto che stiamo cambiando lo stato dei messaggi quando l'utente accede, devi ancora memorizzare il timestamp dell'ultimo accesso?

Per il timestamp dell'ultimo accesso, forse potresti semplicemente inserirlo nel tuo servizio di query mentre le query per i tuoi diversi elementi sono complete. Genera un evento di query completata con informazioni su ID elemento / tipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top