He estudiado algunas implementaciones de muestra CQRS (Java/.Net) que utilizan fuentes de eventos como la tienda de eventos y un simple (No) SQL almacena como la 'tienda de informes'.CQRS - cómo manejar nuevas tablas de informes (o: cómo importar TODO el historial desde la tienda de eventos)
Se ve muy bien, pero parece que me falta algo en todas las implementaciones de muestra.
¿Cómo gestionar la adición de nuevas tiendas/pantallas de informes, después de que una aplicación entre en producción? y cómo importar los datos existentes (más recientes) de la tienda de eventos a la nueva tienda de informes?
Es decir:
imaginar una básicas DDD/CQRS impulsadas aplicación CRM. Cada pantalla (ver realmente) tiene su propio almacén de informes estructurados (una tabla SQL). Todas estas vistas se actualizan usando controladores que escuchan los eventos de dominio (CustomerCreated/CustomerHasMoved, etc.).
Una característica del CRM es que puede registrar llamadas telefónicas (evento PhoneCallLogged). Debido a limitaciones de tiempo, solo implementamos el registro de llamadas telefónicas en V1 del CRM (visualización e informes de quién manejó qué llamada telefónica se implementará en V2)
Después de un tiempo de producción, queremos implementar el ' informes de llamadas telefónicas registradas por cliente y representante de ventas.
Así tenemos que añadir algunas pantallas (vistas) y las tablas de informes de soporte (en la tienda de informe) y llenarlo con los datos ya recogidos en la tienda Evento ...
que es donde se queda bloqueado mientras miraba las muestras que estudié. No manejan la importación de datos (históricos) existentes desde la tienda de eventos a una (nueva) tienda de informes.
Todas las muestras del EventRepository (DomainRepository) solo tienen un método 'GetById' y 'Add', no son compatibles con TODAS las raíces agregadas para llenar una nueva tabla de informes.
Sin esta importación inicial de datos, las nuevas pantallas solo se actualizan para los eventos nuevos. No para las llamadas ya registradas (porque no hubo un oyente de informe para el evento PhoneCallLogged)
¿Alguna sugerencia, recomendaciones?
Gracias de antemano,
Remco
Así que, básicamente, tendrá que integrar una especie de corredor evento de una sola vez (informe de impor t) en su proceso de implementación? –
Y necesitará acceso de 'Consulta' a la tienda de eventos: store.GetAllEvents(); Esto parece contrario a la intuición porque (como dije) Todas las implementaciones de EventStore que he visto (tanto .net/java) no permiten dicho acceso de lectura ... –
Normalmente las implementaciones provistas solo contienen lo que se necesita en tiempo de ejecución, pero no lo que se necesita para el mantenimiento. – thinkbeforecoding