Come funziona una funzionalità di ricerca in DDD con CQRS?

2

In Vaughn Vernon 's book Implementazione del design basato sul dominio e l'accompagnamento applicazione di esempio Ho scoperto che ha implementato un approccio CQRS per iddd_collaboration contesto limitato.

Presenta le seguenti classi nel livello di servizio dell'applicazione:

  • CalendarApplicationService.java
  • CalendarEntryApplicationService.java
  • CalendarEntryQueryService.java
  • CalendarQueryService.java

Mi interessa sapere se un'applicazione presenterà una pagina di ricerca che presenta numerosi menu a discesa e caselle di controllo con una casella di testo intelligente per abbinare diversi pattern di ricerca; Come strutturerai tutta la logica di ricerca?

In un servizio di comando o un servizio di query?

Dai un'occhiata a CalendarQueryService.java Vedo che ha 2 metodi per una query enorme, ma nessuna logica per mescolare e abbinare i filtri di ricerca, ad esempio.

Ho sentito che il livello dell'applicazione non dovrebbe avere alcuna logica di business, quindi dove costruirò la mia query dinamica? o forse solo ingombrare tutto nel servizio Query?

    
posta Songo 21.05.2014 - 00:12
fonte

2 risposte

1

In CQRS vengono creati modelli diversi per comandi e query, quindi è opportuno creare un modello separato per il servizio di query e utilizzare la logica aziendale.

Ad ogni modo, se la ricerca è una parte importante della tua applicazione, creerei un altro contesto limitato per essa.

    
risposta data 13.08.2014 - 15:59
fonte
1

In CQRS, le query non possono avere effetti collaterali e quindi non possono modificare alcun dato. I comandi d'altra parte non devono restituire alcun dato, ma cambiano lo stato dell'applicazione.

Con queste definizioni e il dominio del problema la domanda diventa questa: cosa fa la funzionalità di ricerca? Se è puramente per trovare un ordine, allora non sta cambiando nessuno stato della domanda durante la ricerca . La visualizzazione risultante potrebbe offrire un pulsante o un simile per eseguire operazioni su quell'ordine trovato e quindi passare alla parte comandi di CQRS. Da questo lato, ciò che è necessario completare con successo il comando viene recuperato tramite l'oggetto dominio e attivato e quindi archiviato nell'archivio dati.

Tutto sommato, poiché la logica di esecuzione di una ricerca complessa può sembrare correlata alla logica aziendale o di dominio, direi che in realtà non ha nulla a che fare con la logica del dominio. È solo uno strumento logico per ottenere le informazioni di cui l'utente ha bisogno. La logica del dominio è la logica che verrà applicata quando ad es. cancella l'ordine. Che cosa significa cancellare un ordine è la domanda che risponde alla logica del dominio.

    
risposta data 02.07.2015 - 12:25
fonte