Sono in procinto di adottare i concetti DDD per progettare i nostri prossimi progetti e in particolare CQRS.CQRS e operazioni sincrone (come la registrazione dell'utente)
Dopo aver letto un sacco di cose, sto cercando di implementare una semplice Prova di concetto.
Il fatto è che ho ragione bloccato dopo che ho iniziato: p
Sto cercando di applicare questo approccio ad un semplice processo di registrazione degli utenti, dove passi sono:
- utente riempie la registrazione modulo & inviare la richiesta
- l'applicazione crea l'utente
- l'applicazione autentica l'utente (automatica del registro a)
- l'applicazione invia un VERIFICA e-mail zione per l'utente
- L'applicazione reindirizzare l'utente da qualche altra parte con un messaggio di conferma
Da un punto di vista implementativo, ciò che ho finora è:
- L'azione del controller mappe del richiesta dati a un oggetto RegisterCommand
- L'azione del controllore chiede al Command Bus di gestire RegisterCommand
- Il metodo di "registrazione" del gestore di comandi (UserService) crea un nuovo oggetto Utente (di un nuovo comando o un oggetto di fabbrica)
- Il modello solleva RegisterEvent
- Il gestore di comando chiede al repository per memorizzare il nuovo oggetto utente
Questo è tutto, l'azione di controllo non conosce nessuna delle quella.
Quindi, la mia ipotesi è, dal momento che tutto in questo contesto deve essere fatto in modo sincrono (tranne per l'invio di e-mail), posso usare un bus di comando diretto/sincrono e nell'azione del controller, subito dopo l'invocazione del bus di comando , Posso interrogare per un utente di sola lettura (database di query) e se esiste suppone che tutto sia andato a buon fine, così posso dare all'utente un messaggio di conferma.
Il processo di accesso automatico gestito da un gestore eventi.
Supponendo che questo sia corretto, cosa succede se qualcosa va storto, come informare l'utente con le informazioni corrette?
Un esempio comune è spesso utilizzato negli articoli che possiamo trovare su Internet: un cliente paga il suo ordine utilizzando una carta di credito scaduta. Il sistema accetta la richiesta, informa l'utente che tutto è a posto, ma l'utente riceve un'email pochi minuti dopo comunicandogli che il suo ordine non può essere elaborato.
Bene, questo scenario è accettabile in molti casi, ma per alcuni altri non è possibile. Allora, dove sono gli esempi che trattano questi casi d'uso? : p
Grazie!
questi processori sono in esecuzione nella stessa thread? o avete un altro servizio in esecuzione altrove durante l'elaborazione di comandi/eventi? – Sarmaad
Usiamo un linguaggio di scripting, quindi non c'è thread. Un server di accodamento potrebbe eventualmente esistere, ma non per questo caso d'uso, penso. – Benjamin