Domanda

Dopo aver guardato il video di Greg Yound sulla DDD

http://www.infoq.com/interviews/greg-young-ddd

Mi chiedevo come si potrebbe implementare Separazione Comando-Query (CQS) con DDD quando si hanno nei cambiamenti di memoria?

Con CQS di avere due repository, uno per i comandi, uno per le query. Così come due gruppi di oggetti, oggetti di comando e oggetti query. oggetti Command hanno solo metodi e immobili che potrebbe esporre la forma degli oggetti, e non devono essere utilizzati per visualizzare i dati sullo schermo. oggetti query invece vengono utilizzati per visualizzare i dati sullo schermo.

Nel video i comandi vanno sempre alla base di dati, e così è possibile utilizzare il repository di query per recuperare i dati aggiornati e visualizzare di nuovo sullo schermo.

Potreste usare CQS con qualcosa di simile e schermata di modifica in ASP.NET, in cui vengono apportate modifiche in memoria e lo schermo deve essere aggiornato più volte con i cambiamenti prima che le modifiche vengono mantenute al database?

Ad esempio

  1. vado a prendere un oggetto query dal repository interrogazione e visualizzare sullo schermo
  2. I fare clic su Modifica
  3. I refetch un oggetto query dal repository oggetto query e lo mostro sul modulo in modalità di modifica
  4. a cambiare un valore sul modulo, che autoposts indietro e recupera l'oggetto comando ed emette il relativo comando
  5. COSA FARE: Adesso mi serve per visualizzare l'oggetto aggiornato, se il comando ha fatto modifiche ai campi calcolati. Come l'oggetto di comando non è stato salvato nel database non posso usare il repository di query. E con CQS non ho intenzione di esporre la forma dell'oggetto comando per visualizzare sullo schermo. Come si otterrebbe un oggetto query indietro con i cambiamenti aggiornati da visualizzare sullo schermo.

Un paio di possibili soluzioni che posso pensare è quello di avere un repository sessione o un modo di ottenere un oggetto query dall'oggetto di comando. Oppure CQS si applica a questo tipo di scenario?

Mi sembra che nei cambiamenti video ottenere insistito immediatamente al database, e non ho trovato un esempio di DDD con CQS che affronta il tema dei cambiamenti di dosaggio ad un oggetto di dominio e l'aggiornamento della vista del modificato oggetto di dominio prima infine l'emissione di un comando per salvare l'oggetto di dominio.

È stato utile?

Soluzione

Se davvero si vuole utilizzare CQS per questo, direi che sia il repo query e la scrittura repo entrambi hanno un riferimento allo stesso archivio di backup. Di solito questo riferimento è tramite un database esterno -. Ma nel tuo caso potrebbe essere un List o simili

Altri suggerimenti

Quindi quello che suona come si vuole qui è un comando più granulare.

EG: l'utente interagisce con la pagina web (diciamo a fare un check-out con un carrello della spesa)

.

Le pagine multiple ottenere informazioni stanno costruendo un comando. Il comando non viene inviato finché l'utente effettivamente estrae in cui tutte le informazioni vengono inviate in un unico comando al dominio chiamiamolo un comando "Checkout".

Modelli di presentazione sono molto utili in astrazione questo tipo di interazione.

Spero che questo aiuti.

Greg

Anche per il resto delle vostre preoccupazioni ...

Questi sono più problemi con eventuale consistenza al contrario di CQRS. Non è necessario essere finalmente coerente con CQRS si può fare l'elaborazione del comando scrivere anche al negozio di riferimento (o di utilizzare lo stesso negozio fisico per entrambi come detto) in modo coerente. Vi consiglio davvero le persone a fare questo come la loro architettura di base e di venire più tardi throught e presento eventuale consistenza ove necessario in quanto vi sono costi azssociated con esso.

In memoria, si utilizza in genere la href="http://en.wikipedia.org/wiki/Observer_pattern" Observer design pattern .

In realtà, si vuole sempre di utilizzare questo modello, ma la maggior parte dei database non offrono un modo efficace per chiamare un metodo nella vostra applicazione quando qualcosa nei cambiamenti DB.

I href="http://www.martinfowler.com/eaaCatalog/unitOfWork.html" unità di lavoro modello di progettazione da Patterns of Enterprise Application Architecture corrisponde CQS molto bene - è fondamentalmente un grande comando che persistono roba nel database <. / p>

JdonFramework è framework Java CQRS DDD, è fornire un eventi dominio + modello asincrono, maggiori dettagli https: // jdon.dev.java.net/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top