CQRS: cómo modelar un sistema de ejecución de escenarios

Recientemente comencé a investigar CQRS y DDD para un proyecto de campo verde que estoy a punto de comenzar. Estudié una gran cantidad de material de Udi Dahan, Greg Young, Mark Nijhof y otros. Estos fueron realmente muy útiles y creo que entiendo bien los conceptos. Pero, todavía tengo ciertas preguntas en mi mente sobre cómo puedo aplicarlas a mi propio dominio.

Básicamente, mi sistema será un motor de reglas complejo, en el cual las reglas determinarán el precio final de ciertos productos. Los administradores ingresarán las definiciones y reglas del producto en el sistema. Las reglas serán diseñadas por los administradores utilizando un conjunto predefinido de propiedades que pueden tener valores de un conjunto predefinido, como'Propósito de la compra' (revender, alquilar) o valores de forma libre, comoAños.

Cada producto tendrá un precio base, y las reglas básicamente agregarán / eliminarán del precio base si se aplican.

Una regla de muestra muy simple podría ser:

Para el producto X, IF (Propósito de compra = Revender y edad> 25) Agregue 25 $ al precio base.

Entonces, hay 2 tipos de usuarios que usan el sistema, los administradores, que definen los productos, las reglas y los precios base; y otros usuarios que consultan los precios en función de un escenario en el que ingresan a través de una interfaz de usuario hipotética.

Mi confusión aquí es la siguiente: ejecutar un escenario no cambia el estado del dominio en absoluto, ningún otro sistema externo / persona está interesada en el resultado de la ejecución del escenario, sino el propio usuario en ejecución; devuelve el resultado de un precio cálculo después de ejecutar las reglas aplicables para el escenario dado. Por ejemplo, el usuario puede seleccionarProducto X y consultar el precio para un escenario dado, como(Propósito de la compra = revender y edad = 40). Nuevamente, dado que esta operación no cambia el estado del dominio en absoluto, supongo que es una consulta. Pero, hay un motor de reglas que opera en el escenario para calcular el precio final, que creo que se puede clasificar como la lógica de dominio que se ejecuta. Entonces, ¿a dónde pertenece esta lógica? ¿Es esta una consulta que simplemente funciona fuera del modelo de lectura, o está ejecutando un escenario un comando que debe ejecutarse en el modelo de dominio? Nuevamente, parece que la capa de dominio es el lugar ideal para estas reglas, pero entonces, ¿cómo paso el resultado de la ejecución del escenario al usuario (se siente como una consulta pensando en ello de esta manera). ¿O tal vez, CQRS no es la solución correcta para este problema en particular?

Respuestas a la pregunta(2)

Su respuesta a la pregunta