Pregunta

Creo que entiendo la idea del modelo de lectura en el contexto de ES + CQRS (por favor, corrígeme si no). Sin embargo, todavía tengo algunas dudas sobre el uso en el contexto de los informes 'serios'. Digamos que utilizo un DB relacional más un poco de ORM para crecer mis modelos de lectura. Un modelo básico de 'Summary Stats Lea Model' podría verse así:

 class SummaryStats1
    {
    public Guid TypeId { get; set; }
    public string TypeName { get; set; }
    public Guid SubTypeId { get; set; }
    public string SubTypeName { get; set; }
    public int Count { get; set; }
    }

Dado un evento:

TypeId = 3acf7d6f-4565-4672-985d-a748b7706a3e
TypeName = Bla1
SubTypeId = 41532aa1-f5d1-4ec4-896b-807ad66f75fc
SubTypeName = Bla2

El Normalizador sería:

(1) Compruebe si hay una instancia de la combinación anterior (definida por TypeID, Typename, Subtypeid, SubtyPaName) (2) Si no hay instancia, crearía una instancia y se pondría a cuenta a uno. Si hay que aumentaría el recuento por uno.

¿Es este el enfoque de informes aceptable? Supongo que uno puede ejecutar seleccionadas muy eficientes contra esta estructura de datos designado (para filtrar y otras proyecciones SQL '):

SELECT  TypeName, Sum(Count) FROM SummaryStats1 GROUP BY TypeName

¿Acordarían los expertos CQRS / ES? ¿Es este 'el camino' de hacer cosas (es decir, crear estos modelos de lectura dedicados de informe)? Cualquier referencia al código fuente / ejemplos reales sería muy apreciado.

¿Fue útil?

Solución

¿Es este el enfoque de informes aceptable?

Si es el enfoque de visión , por supuesto, varía según sus requisitos, pero la idea general es correcta.

en resumen:

Usted genera sus modelos de lectura (el término oficial que a veces se usa es ansioso leído derivación ) En los eventos procedentes de su dominio.

Los modelos de lectura pueden ser cualquier cosa que desee (SQL, Redis, Mongo, etc.). Lo que sea que permita que sus consultas sean ejecutantes. En su ejemplo, por ejemplo, no hay ninguna razón por la que no pueda tener 2 modelos de lectura para hacer aún más eficientemente sus consultas (aunque lo que describe es probable que sea suficiente para la mayoría de los casos):

  1. su vista SQL como se describe
  2. Una vista preagregada agrupada por typeName para que no tenga que hacer el grupo cada vez en la hora de la consulta (en su lugar, calcula la agrupación en el normalizador).
  3. En resumen, no hay una manera correcta o incorrecta sobre cómo construir sus modelos de lectura. La belleza es exactamente que es completamente gratuita para modelar los modelos de lectura de alguna manera que desee (basado en el patrón de consulta y el rendimiento que envíe) sin tener que pensar en cómo esos modelos impactan escribimos (simplemente porque no lo hacen. cqrs divides lee y escribe)

    El uso de eventos en conjunción con CQRS da Posibildies incluso mejor, es decir, para crear nuevos readmodels y rellenarlos con datos simplemente al reproducir eventos anteriores desde el eventource.

    Solo algunos ejemplos adicionales de lo que podría considerarse un 'modelo de lectura' de sus datos:

    • una vista de incrustación con redis (que es una alternativa de lo que pareció describir)
    • un índice de búsqueda de ELASTICSEARCH / SOLR
    • una tienda / índice KV para algunas miradas rápidas por clave.

    idea de nuevo, es que estos 'modelos de lectura' / vistas siempre se mantienen actualizados (eventualmente consistentes) al presionar los eventos de actualización (generalmente por medio de pubsub)

    Para obtener más información, consulte la respuesta más enlaces a esta pregunta: Enfoques de implementación del lado lector usando cqrs

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