2011-09-01 8 views
5

tengo una raíz 'orden' agregado, y tiene una serie de métodos en lo que establecen internamente su campo 'Estado':En CQRS, ¿cómo comunico una lista de métodos permitidos en un aggrregate a la UI?

  • Presentar
  • Poner en espera
  • Take Off Hold
  • Confirmar
  • Cancelar
  • etc.

Las acciones disponibles dependen del estado actual de la orden (p. no se puede poner en espera si ya está en espera). El problema es que necesito proporcionar una consulta para decirle a la interfaz de usuario qué comandos están disponibles para poder ocultar las operaciones que de lo contrario arrojarían un InvalidOperationException.

¿Cómo hago esto con una violación mínima de DRY?

Respuesta

4

La solución más simple es proyectar el estado actual junto con las transiciones disponibles para leer/consultar el modelo y seleccionarlo junto con los datos para mostrar.

Ejemplo: PlaceOnHoldCommand resultados en OrderPlacedOnHoldEvent que (además de ser puesto en EventStore) se publica y manejados por OrderTransitionsEventHandler que denormalizes transiciones disponibles a una tabla DB asociado con el orden. El cliente selecciona las transiciones disponibles y actúa en consecuencia (oculta los botones no disponibles o algo así).

Esta es, por supuesto, una de las opciones. Sin embargo, no espere que no haya duplicación alguna. CQRS ayuda a gestionar la complejidad y, a veces, esto implica ligeras violaciones de DRY.

+0

+1 - aceptado. No hay mucho más que añadir, así es como lo harías –

+0

¡Oh, eso es simplemente sexy! ¡Gracias! –

Cuestiones relacionadas