Recentemente ho iniziato a studiare CQRS e DDD per un progetto di campo verde che sto per iniziare. Ho studiato una grande quantità di materiale da Udi Dahan, Greg Young, Mark Nijhof e altri. Questi sono stati davvero molto utili e penso di avere una buona comprensione dei concetti. Ma ci sono ancora alcune domande sulla mia mente su come posso applicarle al mio dominio.CQRS - come modellare un sistema di esecuzione di uno scenario
Il mio sistema sarà fondamentalmente un motore di regole complesse - in cui le regole determineranno il prezzo finale di determinati prodotti. Le definizioni e le regole del prodotto saranno inserite nel sistema dagli amministratori. Le regole verranno progettate dagli amministratori utilizzando un insieme predefinito di proprietà che possono avere valori da un set predefinito, ad esempio "Scopo dell'acquisto" (Rivendita, Locazione) o valori di modulo libero, ad esempio Età.
Ogni prodotto avrà un prezzo base e le regole saranno fondamentalmente aggiunte/rimosse dal prezzo base se applicabili.
Una regola di esempio molto semplice potrebbe essere:
Per il prodotto X, IF (Acquisto Scopo = rivendere e Età> 25) aggiungere 25 $ al prezzo base.
Quindi ci sono 2 tipi di utenti che utilizzano il sistema, gli amministratori, che definiscono i prodotti, le regole e i prezzi base; e altri utenti che interrogano i prezzi in base a uno scenario che inseriscono tramite un'interfaccia utente what-if.
La mia confusione è questa: l'esecuzione di uno scenario non cambia affatto lo stato del dominio, nessun altro sistema/persona esterna è interessato al risultato dell'esecuzione dello scenario ma all'utente stesso che esegue - restituisce il risultato di un calcolo del prezzo dopo aver eseguito le regole applicabili per lo scenario indicato. Ad esempio, l'utente potrebbe selezionare Prodotto X e interrogare il prezzo per un determinato scenario, ad esempio (Acquisto scopo = Rivendita e Età = 40). Ancora una volta, dal momento che questa operazione non modifica affatto lo stato del dominio, immagino sia una query. Tuttavia, esiste un motore di regole che opera nello scenario per calcolare il prezzo finale, che immagino possa essere classificato come logica di dominio da eseguire. Quindi - dove questa logica appartiene? Si tratta di una query che funziona appena fuori dal modello di lettura o che sta eseguendo uno scenario un comando che deve essere eseguito nel modello di dominio? Di nuovo, sembra che il dominio sia lo spazio per queste regole, ma come passare il risultato dell'esecuzione dello scenario all'utente (sembra una domanda che ci pensa in questo modo). O forse, CQRS non è la soluzione giusta per questo particolare problema?
+1 per avermi detto che esiste un pattern [cqrs] (http://blog.fossmo.net/post/Command-and-Query-Responsibility-Segregation-%28CQRS%29.aspx) che non ho mai ascoltato prima. – k3b