In ES / CQRS, possiamo / possiamo trattare le richieste come eventi?
Considera il seguente flusso
Un ospite ha visitato alcuni URL e ha pubblicato dati per creare un nuovo account. Ecco un modo per implementarlo
1- Invoke CreateNewUserCommand [payload = posted data]
2- Invoke CreateUserHandler(CreateNewUserCommand)
3- Fire CreateNewUserRequestedEvent [payload= posted data]
4a- Handle it in CreateNewUserEventHandler
4b- Validate the input against invariants
5- If validation failed [invalid email, duplicate user, payment not sufficient etc] fire another event
UserCreationFailed:PaymentInsufficent [paylod= posted data]
UserCreationFailed:EmailInvalid [paylod= posted data]
UserCreationFailed:UserAlreadyExists [paylod= posted data]
6- If validation is successfull
fire an event
NewUserCtreated [payload= posted data + created user id]
Martin Fowler afferma chiaramente che proteggiamo gli eventi del dominio quando lo stato è cambiato. Ora se consideriamo CreateNewUserRequestedEvent, è solo un'intenzione di cambiare lo stato.
Successivamente, quando ripetiamo gli eventi, CreateNewUserRequestedEvent non conta come un evento per partecipare all'aggiornamento di stato, ma fa l'evento NewUserCtreated.
Tuttavia, se guardiamo esternamente il sistema, anche una richiesta di fare qualcosa [CreateNewUserRequestedEvent] è un evento. Prendi l'esempio di un caso d'uso quando abbiamo fatto la richiesta, la richiesta è stata salvata, ma il server va giù in quel momento.
La prossima volta che il server sale, possiamo riprendere da dove siamo partiti e continuare a creare l'utente.