Quindi con cqrs, accettiamo che la coerenza sia definitiva.
Tuttavia, ciò non significa che l'utente debba continuamente eseguire il polling o che, in un secondo momento, un aggiornamento debba richiedere più di 500ms da sincronizzare.
Per amore di UX, vogliamo almeno dare l'illusione di coerenza, o se non possibile, essere il più trasparente possibile.
Con questo in mente, ho questa configurazione:
- client Web angularjs, utilizza
- servizi di webapi restful, invia comandi a
- Gestori di comandi nservicebus, salvati in
- neventstore, invia eventi a
- Gestori di eventi nservicebus, invia un messaggio a
- hub signalr, invia notifiche a
- client Web angularjs
quindi con quell'impostazione, in teoria
- alcuni avvia una richiesta
- il server convalida la richiesta
- invia i comandi necessari
Nel frattempo
- il client ottiene una risposta di 200
- aggiorna la vista: lavorandoci sopra
- ottiene il messaggio qualche tempo dopo: fatto, ecco i dati aggiornati
Ecco dove le cose si fanno interessanti, ogni comando può generare più eventi. Non sono sicuro se questo è un no serio, no o no, ma è così che è attualmente. Ad esempio, un nuovo cliente genera CustomerIDCreated, CustomerNameUpdated, CustomerAddressUpdated, ecc ...
Quale gestore di eventi ha bisogno di notificare il client? Dovrebbero tutti in un aggiornamento in stile barra di avanzamento?