Ho un sistema CQRS in fase di sviluppo che passa il comando a un CommandHandler, che ottiene un aggregato da un repository e chiama un metodo con le proprietà del comando (convertito in ValueObjects).
Il metodo crea quindi l'evento internamente e lo registra in un oggetto hash da raccogliere e conservare in seguito.
Ho alcuni metadati che devono venire dalla richiesta iniziale e essere mantenuti con l'Evento risultante, e sono detestato di dover passare questo attraverso il metodo sull'Agenda che IMO dovrebbe riguardare solo il dominio stesso, e non i dati relativi ai messaggi.
Il problema che ho è che ogni singolo metodo pubblico nel dominio dovrà accettare questo meta oggetto; mi sembra ridicolo. Anche un metodo che normalmente non avrebbe parametri (come un metodo toggleSomeState()
).
Quindi, la mia domanda è: qualcuno può fornire un esempio decente di come i meta dati possano aggirare l'Aggregato, ma finire nell'Evento dall'altra parte?
Aggiornamento:
Ecco una spiegazione dei metadati. Al momento disponiamo di due Uuid che sono stati utilizzati per l'autenticazione e, data la natura del dominio come sistema multi-tenantato, questi uuid devono essere mantenuti per tutta la durata dell'applicazione. Naturalmente, se ne avrò due ora, avrò più tardi;) Questo è un altro motivo per cui non voglio passarli nei metodi aggregati.
Inoltre, da un commento, ho appreso che una volta che un evento è stato prodotto, è immutabile. Come potrei quindi sentirmi a mio agio nel consentire al sistema di modificare quell'evento prima della persistenza per aggiungere questo metadati? È questa una di quelle occasioni di compromesso con cui dovrei convivere?