Volevo solo chiederti ragazzi se questa architettura CQRS è troppo complessa o sto facendo qualcosa di sbagliato? Quindi, solo per spiegare l'immagine qui sotto:
Dopo che un contesto limitato emette un evento (SomeEventHappended = DTO) che qualcosa è successo, questo evento viene ricevuto in un altro contesto limitato.
- Dopo che l'evento viene ricevuto in un altro contesto limitato da saga (noto anche come process manager) e dopo aver deciso quale comando emettere, questo evento viene mappato sul messaggio di comando.
- Dopo che il comando saga invia, questo comando viene ricevuto dal gestore comandi. Il gestore comandi caricherà AggregateRoot dal repository e chiamerà un metodo su di esso. Poiché il metodo di dominio chiamato si aspetta oggetti di dominio (e non comandi DTO), devo mappare di nuovo - > comando agli oggetti del dominio.
- Dopo che è stato richiamato il metodo su AggregateRoot e poiché mi piacerebbe utilizzare il sourcing di eventi, devo mappare i dati da questi oggetti di dominio a DomainEventForEventSourcing che è anche un nuovo DTO. Quindi posso chiamare il metodo (DomainEventForEventSourcing event) su AggregateRoot.
- Quando il metodo reagisce su DomainEvents (quando viene reidratato dall'archivio eventi o quando viene ricevuto per la prima volta) - chiamando il metodo when (), dobbiamo nuovamente mappare i dati, ma questa volta tra DTO DomainOventForEventSourcing e oggetti dominio.
Solo una nota: in questo caso sto utilizzando DTO piuttosto complessi e non sono solo 2-3 Integer o variabili stringa. Di solito tutti i campioni mantengono queste cose semplici, ma quando inizi a creare app reali, non sembra così facile.
Quindi in totale 4 mappature che si verificano ogni volta. Forse è legittimo, ma forse sto donando qualcosa di logoro ...