Che cosa si fa solitamente quando viene chiesto ad un aggregato di applicare un evento "impossibile" al suo stato?
Ad esempio, se un aggregato ShoppingCart
ha già applicato un evento CustomerAckRec
(l'utente ha ricevuto la ricezione dell'oggetto spedito) e ora viene chiesto di applicare un evento AddedItem
?
Questa domanda mi confonde, perché da un lato non ha senso applicare quell'evento. L'aggiunta dell'elemento creerebbe uno stato impossibile, ma in tal modo si limiterebbe a inghiottire l'evento e lasciare lo stato così com'è.
Sembra che debba essere lanciato un errore. Ma ciò significa che una semplice applicazione di un evento è ora un'azione di tipo fessibile, quindi dobbiamo gestire tale errore.
Ma d'altra parte, gli eventi dovrebbero essere la fonte della verità, quindi non dovremmo convalidarli rispetto allo stato attuale dell'aggregato?
Immagino che questo sia filosoficamente completamente diverso dalla convalida della regola aziendale se un comando ha successo o meno, più di una convalida dei dati provenienti da un'altra macchina. Ma in pratica, questo essenzialmente duplica sempre una parte della convalida del comando che avrebbe causato la creazione dell'evento! Questo è esattamente il motivo per cui supponiamo che questo evento non sarebbe mai esistito in primo luogo.
Quindi, dovrei davvero fingere che non ci siano possibilità che questo evento arriverà? Dovrei semplicemente fingere / trasmettere che so che se questo evento è arrivato, lo stato è tale che questo evento può essere applicato in modo significativo a?
Non associare ciecamente eventi nell'aggregato senza alcun pensiero sul possibile difficile tracciamento del comportamento indefinito che deriverebbe dall'archiviazione degli eventi danneggiati, né la duplicazione nella convalida si adatta bene con me.