Comando Separazione query. Come gestire la gestione degli errori per le funzioni di muting che ritornano void

3

Sto imparando i principi SOLID in un corso di Pluralsight in cui è in discussione la separazione delle query dei comandi. Sto bene con le funzioni di query che restituiscono qualcosa (e in modo cruciale essendo non mutanti).

La domanda che ho riguarda i comandi. L'idea qui è che i comandi dovrebbero restituire il nulla. Cosa succede se c'è un problema nell'esecuzione del comando? Alcune funzioni che potrebbero essere mutanti restituiscono un codice risultato. Questo idioma è abbastanza comune nei programmi in C. Quindi, come risolverlo.

Devi supporre che queste funzioni dovrebbero sempre avere successo? O dovrebbe sollevare un'eccezione se la funzione non riesce?

Come lo gestiresti se la lingua non supporta le eccezioni, ad es. C?

Qualche commento?

    
posta user619818 14.04.2018 - 17:27
fonte

2 risposte

1

La separazione di comando / query non è propriamente appropriata in una lingua che utilizza i codici risultato. Se vuoi implementarlo in un laguage con i codici risultato, devi dire che un "comando" restituisce solo un codice risultato, mentre una "query" restituisce una struttura o un'opzione con un codice risultato o un valore reale.

    
risposta data 20.04.2018 - 21:24
fonte
-1

in Segregazione di responsabilità della query dei comandi (in breve CQRS) spesso comunichi tra servizi che utilizzano eventi. Quindi il tuo comando "nuovo cliente" potrebbe portare a un evento "cliente creato". La tua vista potrebbe rispondere a quell'evento aggiornando così l'utente vedrà il nuovo cliente nell'elenco dei clienti.

La stessa cosa vale per gli errori. un comando "nuovo cliente" potrebbe portare a un evento "rating insufficiente rilevato" (un errore per qualcuno che non soddisfa alcuni requisiti di rating) e chiunque abbia bisogno di sapere che le informazioni potrebbero ascoltare quell'evento.

Per semplici convalide (come il nome utente che viene riempito) un sistema CQRS non accetta il comando. A seconda della lingua specifica, in questo caso è possibile restituire un codice di errore anziché vuoto (l'eccezione di lancio o i codici di risposta http sono gli altri metodi più comuni per gestirlo). La cosa importante da ricordare qui è che un "ok" significa che il comando viene effettivamente considerato, non un ok nei termini in cui tutti i servizi avranno successo. La validazione del tuo comando dovrebbe essere solo limitata ai controlli come sono i campi obbligatori pieni e i campi numerici sono effettivamente numerici.

    
risposta data 14.04.2018 - 22:37
fonte

Leggi altre domande sui tag