Pergunta

Eu acho que eu entendo a ideia de o modelo de leitura no contexto de ES + CQRS (por favor, corrijam-me se não).No entanto, eu ainda tenho algumas dúvidas sobre como utilizá-lo no contexto de "grave" relatórios.Vamos dizer que eu usar um banco de db, além de alguns ORM para crud minha leitura de modelos.Um básico "de estatística de resumo de leitura" modelo poderia se parecer com este:

 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 um evento:

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

O normalizadora seria:

(1) Verifique se existe uma instância da combinação acima (definido pelo TypeId, TypeName, SubTypeId, SubTypeName) (2) Se não existir nenhuma instância seria criar uma instância e definir Contagem de um.Se existe vai aumentar a Contagem de um.

É este o aceitável relatório de abordagem?Eu acho que pode ser executado muito eficiente seleciona contra esta de-normalizada estrutura de dados (por filtragem e outras sql 'projeções'):

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

Gostaria de CQRS/ES especialistas concordam com isso?É este "o caminho" de fazer as coisas (i.e.criar estes dedicados relatório de ler modelos)?Qualquer referência ao código-fonte/exemplos reais seria muito apreciado.

Foi útil?

Solução

É este o acceptatble relatório de abordagem?

se é o resporting abordagem do curso varia dependendo de suas necessidades, mas a ideia geral é correta.

Em resumo:

Gerar sua leitura de modelos (o termo oficial é por vezes utilizado Ansioso Leitura De Derivação) baseado em eventos provenientes de seu domínio.

A leitura de modelos pode ser qualquer coisa que você deseja (sql, redis, mongo, etc.).O que permite que as consultas sejam funcionais.No seu exemplo, por exemplo, não há nenhuma razão porque você não pode ter 2 modelos de leitura para o mesmo de forma mais eficiente, faça suas consultas (apesar de que você descreve é provável que suficiente para a maioria dos casos):

  1. seu modo de exibição sql, conforme descrito
  2. um preaggregated vista agrupados por typeName de modo que você não precisa fazer o grupo de cada vez que em consulta-tempo (em vez de calcular o agrupamento no normalizador).

Em suma, não há nenhuma maneira certa ou errada sobre como construir a sua leitura de modelos.A beleza é exatamente o que você está completamente livre para o modelo de leitura de modelos em qualquer maneira que você quiser (com base no padrão de consulta e gargalos de desempenho do que você imagina) sem ter de pensar sobre como os modelos de impacto escreve (simplesmente porque eles não desde cqrs divide lê e escreve)

Usando eventsourcing em conjunto com CQRS dá para ainda melhor possibilties, nomeadamente a criação de novas readmodels e preenchê-los com dados simplesmente repetindo os eventos do passado, do eventsource.

Apenas alguns extras exemplos do que pode ser considerado um "modelo de leitura" de seus dados:

  • um INCR ver com Redis (que é uma alternativa do que você parecia descrever)
  • Um Elasticsearch / Solr índice de pesquisa
  • Um KV-loja/ index para algumas pesquisas pela chave.

Idéia novamente, é que estes "modelos de leitura'/ pontos de vista são mantidos sempre up-to-date (eventualmente consistente) empurrando eventos de atualização para eles (normalmente por meio de um objeto)

Por mais boa leitura veja a resposta além de links para esta pergunta:Leia lado abordagens de implementação usando CQRS

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top