Pregunta

Después de haber visto el vídeo por Greg Yound en DDD

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

Me preguntaba cómo se puede poner en práctica la separación de comandos de consulta (SCC) con DDD cuando se tiene en cambios de memoria?

Con CQS que tiene dos repositorios, uno de los comandos, uno para consultas. Así como dos grupos de objetos, objetos de comando y objetos de consulta. objetos de comando sólo tienen métodos y propiedades que no podría exponer a la forma de los objetos, y no deben ser utilizados para mostrar los datos en la pantalla. objetos de consulta en el otro lado se utilizan para mostrar los datos de la pantalla.

En el video los comandos siempre van a la base de datos, y para que pueda utilizar el repositorio de consulta para recuperar los datos actualizados y volver a mostrar en la pantalla.

¿Podría utilizar CQS con algo parecido y pantalla de edición en ASP.NET, donde los cambios se realizan en la memoria y necesita ser actualizado varias veces con los cambios antes de que los cambios se conservan en la base de datos de la pantalla?

Por ejemplo

  1. voy a buscar un objeto de consulta desde el repositorio de consulta y mostrarlo en la pantalla
  2. I Haga clic en Editar
  3. I refetch un objeto de consulta desde el repositorio de objetos de consulta y lo mostrará en la forma en modo de edición
  4. cambio de un valor en el formulario, que autoposts atrás y va a buscar el objeto de comando y emite el comando relevante
  5. Qué hacer: Ahora necesito para visualizar el objeto actualizado como el comando hizo cambios en los campos calculados. A medida que el objeto de comando no se ha guardado en la base de datos que no puedo usar el repositorio de consulta. Y con CQS yo no estoy destinado a exponer la forma del objeto de comando para mostrar en la pantalla. ¿Cómo se obtiene un objeto de consulta hacia atrás con los cambios actualizados para mostrar en la pantalla.

Un par de posibles soluciones que se me ocurre es tener un repositorio de sesión, o una manera de conseguir un objeto de consulta del objeto de comando. ¿O CQS se aplica a este tipo de escenario?

Me parece que en los cambios de registro No insistí de inmediato a la base de datos, y no he encontrado un ejemplo de DDD con CQS que aborda el tema de los cambios por lotes a un objeto de dominio y actualizar la vista de la modificación objeto de dominio antes de que finalmente la emisión de un comando para guardar el objeto de dominio.

¿Fue útil?

Solución

Si realmente desea utilizar CQS para esto, yo diría que tanto el repositorio de consultas y el Comentario de recompra ambos tienen una referencia al mismo almacén de respaldo. Por lo general, esta referencia es a través de una base de datos externa -. Pero en su caso podría ser un List o similares

Otros consejos

Así que lo que suena como usted quiere aquí es un comando más granular.

Por ejemplo: el usuario interactúa con la página web (digamos que hacer una comprobación con un carrito de la compra)

.

Las múltiples páginas que consiguen la información están construyendo un comando. El comando no consigue enviado hasta que el usuario realmente desprotege donde toda la información se envía en un solo comando para el dominio vamos a llamarlo un comando de "caja".

modelos de presentación son muy útiles en la abstracción de este tipo de interacción.

Espero que esto ayude.

Greg

También para el resto de sus preocupaciones ...

Estos son tanto más preocupaciones con consistencia eventual en contraposición a CQRS. No es necesario ser consistente con el tiempo CQRS puede hacer que el procesamiento del comando escribir también a la tienda de informes (o utiliza la misma tienda física tanto como se mencionó) de una manera coherente. De hecho, me recomiendo a la gente a hacer esto como su arquitectura base y lleguen más tarde throught y presento consistencia eventual cuando sea necesario, ya que hay costos azssociated con él.

En la memoria, que se suele utilizar los href="http://en.wikipedia.org/wiki/Observer_pattern" Observador patrón de diseño .

En realidad, siempre se desea utilizar este patrón, pero la mayoría de las bases de datos no ofrecen una forma eficiente de llamar a un método en su aplicación cuando algo en los cambios de base de datos.

Los href="http://www.martinfowler.com/eaaCatalog/unitOfWork.html" del patrón de diseño de trabajo los patrones de arquitectura de aplicación empresarial coincide con CQS muy bien - que es básicamente una gran comandos que persisten cosas en la base de datos <. / p>

JdonFramework es marco java CQRS DDD, se suministra una eventos de dominio + modelo asincrónico, más detalles https: // jdon.dev.java.net/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top