Trovo difficile alleare CQRS / ES con l'architettura della carta "Out of tar pit".
Questa architettura implica 4 livelli:
- Stato (stato dell'applicazione)
- Dominio aziendale (puramente funzionale)
- I / O
- Controllo (tutte le cose sporche per far lavorare gli strati)
Nel mio caso, lo stato dipende in gran parte da un database.
Tenendo presente il CQRS / ES, ho un motore decisionale. Il motore decisionale per la produzione di un evento da un comando è Business Domain, che deve essere puramente funzionale.
Quando un comando richiede la creazione di un elemento, il motore decisionale sceglie di accettare o meno di creare un evento CreateItem solo se l'elemento non è già esistente (semplificato per l'esempio).
In teoria, dovrei passare lo stato dell'applicazione come argomento al dominio aziendale, in modo da decidere di conseguenza.
Ma nel caso di un database, non posso passare il database come parametro libero da effetti collaterali. Mi sento come se dovessi eseguire la query controllando in anticipo l'esistenza dell'elemento all'interno del livello di controllo e quindi passare il risultato della query sul database al dominio aziendale, che restituirà un evento o meno.
La conseguenza è che ho un codice aziendale (quello relativo alla query e la logica di business per eseguire i controlli) che si troverà nel livello di controllo.
Questo mi sembra sbagliato per quanto ho capito sul documento "Out of the tar pit" e anche su CQRS / ES.
Il problema principale mi sembra che lo stato sia enorme: è l'intero database.
Cosa c'è di sbagliato nel mio ragionamento?