2010-12-31 9 views
6

Ho guardato al CQRS ma lo trovo restrittivo quando si tratta di mostrare il risultato dei comandi in diciamo un'applicazione Web.Quale risultato restituisce una richiesta di comando in CQRS design?

Mi sembra che utilizzando CQRS, si è costretti ad aggiornare l'intera vista o parti di esso per vedere le modifiche (utilizzando una seconda richiesta) perché la richiesta di comando originale memorizzerà solo un evento che deve essere elaborato in futuro.

In un'applicazione Web, è possibile che una richiesta di comando possa riportare il risultato dell'evento che crea nel browser?

risposta

6

La risposta al titolo di questa domanda è abbastanza semplice: nulla, nulla o dal punto di vista di un browser/di riposo 200 OK con un corpo vuoto.

I comandi applicati al sistema (se la modifica viene eseguita correttamente) non producono un risultato. E nel caso in cui si desideri lasciare la logica aziendale sul lato server, sì è necessario aggiornare i dati eseguendo un'altra richiesta (query) al server.

Tuttavia, molto spesso è possibile sbarazzarsi del 2 ° roundtrip al server. Prendi un tavolo dove modifichi una riga e premi un pulsante Salva. Hai davvero bisogno di aggiornare il tavolo? O nel caso in cui un utente invii un commento su un post del blog basta aggiungere il commento agli altri commenti nella dom senza il round trip.

Se si desidera che lo stato modificato venga restituito dal server, è necessario riflettere su ciò che si sta cercando di ottenere. La maggior parte degli scenari può essere modificata in modo che un semplice 200 OK sia più che sufficiente.

Aggiornamento: Informazioni sulla domanda relativa all'accodamento dei comandi in entrata. Non è consigliabile che i comandi in entrata vengano accodati poiché questo può restituire i falsi positivi (un comando è stato ricevuto e accodato correttamente ma quando il comando tenta di modificare lo stato del sistema fallisce). C'è una eccezione alla regola e cioè se si sta avendo un sistema con un solo modello di append come stato. Quindi è sicuro mettere in coda la mutazione dello stato del sistema fino a tardi se il comando è valido.

Udi Dahans articolo intitolato CQRS chiarificata viene sempre una buona lettura su questo argomento http://www.udidahan.com/2009/12/09/clarified-cqrs/

+0

risposta interessante Tim, Grazie. Vedo la saggezza nell'usare CQRS per l'implementazione di comandi che non richiedono risultati immediati. Il problema di aggiornare il DOM pensando che il Comando si materializzerà alla fine è che rende difficile dire all'utente che il comando non ha avuto successo. Forse a quel punto l'utente ha già lasciato la pagina pensando che il suo input sia efficace. Non riesco a vedere come CQRS può essere utilizzato per risolvere questo problema se tutti i comandi devono restituire void. – Roman

+0

I comandi devono sempre modificare lo stato del sistema quando inviato. Rinviare questo tipo di lavoro potrebbe causare modifiche non valide allo stato del sistema dando all'utente un falso positivo come si fa notare. Accodare i comandi in entrata non è la strada da percorrere a meno che non si stia lavorando con un modello di append come stato del proprio sistema! Ora che lo stato viene modificato dal comando inviato, è possibile modificare l'interfaccia utente nel browser Web. Altre cose come le visualizzazioni denormalizzate dei tuoi dati, l'aggregazione di dati, ecc. Che compensano le tue richieste potrebbero essere cambiate fino a più tardi. –

+5

"La maggior parte degli scenari può essere modificata in modo che un semplice 200 OK sia più che sufficiente." Direi che è vero il contrario. La maggior parte delle operazioni richiede l'id dell'elemento appena creato per eseguire ulteriori operazioni su di esse. –

Problemi correlati