CQRS utilizzando solo query o servizi di lettura?

0

Discutendo di un'implementazione CQRS con il mio team non siamo d'accordo su un punto riguardante il lato Query .

Sul lato Commad abbiamo le vere finestre di comando; un CommandDispatcher che pianifica i comandi, definisce un comando Unità di lavoro e invia comandi ai gestori; gestori che contengono la logica aziendale e eseguono operazioni CRUD utilizzando i repository.

Per il lato Query il team è diviso in due:

  1. Una parte del team afferma che è presente un semplice livello di servizio di lettura abbastanza, servizi che accedono direttamente all'origine dati (n repository) e possono essere richiamati direttamente dai chiamanti (nessuna query classi né un dispatcher di query).
  2. L'altra parte del team dice che dovremmo creare la query lato simmetricamente al lato Comando , con classi di query, a query dispatcher e recupera i dati dai repository.

Non è necessario alcun sistema di sincronizzazione o di pianificazione per le query (dispatcher di query) e i gestori di query devono essere principalmente classi che restituiscono i dati recuperati dai repository. Quindi aggiungeremo layer extra potenzialmente inutili solo per motivi di simmetria.

Qualche pensiero?

    
posta polkduran 04.12.2018 - 11:17
fonte

2 risposte

1

Disclaimer It may be personal opinion.

Esiste un altro principio di progettazione: KISS -Keep It Simple ...

Il Repository semplice può trarre qualche vantaggio in quanto può semplificare il codice dei tuoi servizi, ma andare più in profondità non può essere certamente necessario.

Devi pensare a quali sono i tuoi valori aziendali nel realizzare un motore di query sovradimensionato.

  • Ti aspetti che dovrai passare query tra sottosistemi? Se è così allora qualche dispatcher può essere d'aiuto (lo chiamerei comunque router in ogni caso).

  • Ti aspetti che dovrai aggiungere frequentemente nuovi parametri di ricerca? Se è così, le classi di query saranno sicuramente necessarie.

risposta data 04.12.2018 - 12:31
fonte
4

Una proprietà da notare sulle query è che non cambiano lo stato dei dati del dominio. Ne consegue che non hai bisogno di tutta la tua logica di dominio per garantire l'integrità dei dati - quel controllo era già stato fatto quando lo hai scritto.

Quindi non c'è molto valore nel caricare i dati in un modello di dati solo per rimuoverli di nuovo.

È possibile che i limiti alcuni siano posizionati, per garantire che le modifiche possano essere isolate e che il codice duplicato possa essere riutilizzato.

La simmetria non è un obiettivo utile a meno che non riduca in qualche modo i costi di manutenzione. La cerimonia è senza valore.

    
risposta data 04.12.2018 - 15:00
fonte

Leggi altre domande sui tag