CQRS: Leer modelo construido en la demanda?

Según entiendo, los defensores de CQRS separan los modelos de lectura de los modelos de dominio y tienen un modelo de lectura particular para cada proyección de modelo de dominio necesaria.

Desde el punto de uso, la forma en que se almacena y recupera el modelo de lectura debe ser transparente: usted emite una consulta y obtiene un modelo de lectura sin importar cómo se realiza.

Muchos ejemplos y artículos utilizan tablas separadas para almacenar modelos de lectura y volver a generarlos en respuesta a los cambios en el modelo de dominio.

Realmente no me gusta este enfoque debido a las siguientes razones:

No todos los posibles modelos de lectura serán necesarios a menudo;Los cambios en los requisitos pueden invalidar los modelos de lectura existentes, por lo que todos deberán regenerarse;Si, por alguna razón, el modelo de lectura contiene propiedades que no se pueden almacenar en la generación pero que se deben calcular, se le obliga a utilizar procedimientos / funciones / vistas almacenados;Dado que los modelos de lectura son independientes de los modelos de dominio en caso de que el almacenamiento en caché a nivel de la aplicación se use en el cambio de modelo de dominio, debe informar a todas las aplicaciones que los modelos de lectura antiguos deben ser desalojados de la caché;A veces no es posible ni deseable desnormalizar completamente el gráfico de objetos complejos, por lo tanto, es necesario tener modelos de lectura que sean coherentes para la versión de la entidad del dominio en particular, es decir, deben generarse en la misma transacción;Algunas entidades de dominio tienen propiedades que cambian con frecuencia pero deben incluirse en cada modelo de lectura.

En base a esto, estoy pensando en tener servicios de consulta que deberían:

Para los modelos de lectura que deben generarse con frecuencia y / o son simples proyecciones de entidades de dominio: no los almacene, sino que los genere a través de ORM consultando las entidades de modelo de dominio en la base de datos;Para los modelos de lectura que no necesitan generarse con frecuencia y son complicadas, las proyecciones de la entidad de dominio los generan y almacenan en tablas de bases de datos.

También veo que algunas personas sugieren almacenar modelos de lectura como blobs. El problema con el almacenamiento de modelos de lectura como blobs es que, en caso de que necesite buscarlos, deberá extraer las propiedades para la indexación y si necesita una búsqueda de texto completo, incluso los debe guardar en un formato que pueda entenderse por texto completo. herramientas.

Como puede ver, básicamente desearé tener un modelo de lectura que exista solo después de la ejecución de la consulta y no se genere en función de los eventos de cambio de dominio. ¿Es esta solución aceptable para CQRS? La razón por la que estoy buscando CQRS es mejorar la arquitectura de la aplicación al separar los modelos de vista que se pueden almacenar en caché del manejo de acciones del usuario, tener aplicaciones web habilitadas para AJAX con actualizaciones asíncronas después de las acciones del usuario y reducir el espacio para que los desarrolladores junior produzcan código inigualable colocando la lógica de negocios. En el lugar e incluso la implementación no fiel de CQRS para mí parece ser un buen paso en la dirección correcta.

Respuestas a la pregunta(1)

Su respuesta a la pregunta