CQRS - tecnologiadB/MonitoramentoRuidoWiki GitHub Wiki

🧩 Recomendação — Aplicar o Padrão CQRS (Command Query Responsibility Segregation)


🧠 Descrição do Problema

Atualmente, a aplicação utiliza o mesmo modelo e camada de serviços para operações de leitura e escrita, o que gera acoplamento e limitações de performance.

Caso seja necessário criar rotinas agendadas (como extração de relatórios) é altamente recomendável que se utilize práticas do CQRS para separar base de dados de leitura e escrita.


💥 Impacto Causado

  • Acoplamento entre domínio e relatórios, dificultando evolução do código.
  • Risco de inconsistências entre dados transacionais e consultas analíticas.
  • *Gargalos e concorrência de acesso aos dados

Nível de impacto: 🔴 Alta (Caso for haver mais desenvolvimentos de serviços que consomem o banco de dados)


                           ┌────────────────────────────┐
                           │        Aplicação           │
                           │      (API / Frontend)      │
                           └────────────┬───────────────┘
                                        │
                    ┌───────────────────┼───────────────────┐
                    │                                       │
             Consultas (Query)                       Comandos (Command)
                    │                                       │
                    ▼                                       ▼
         ┌────────────────────┐                ┌──────────────────────────┐
         │   Read Database    │◄───Eventos─────│   Write Database (ORM)   │
         │ (Projeções/View)   │                │ (Entidades e Domínio)    │
         └────────────────────┘                └──────────────────────────┘

🔗 Referência da Solução


⚙️ Como Aplicar

1. Separar responsabilidades de leitura e escrita

Em um modelo tradicional, a mesma classe ou serviço lida com operações de leitura e escrita sobre a mesma base de dados.
No CQRS, essas operações são divididas, permitindo modelos e fluxos otimizados para cada tipo de operação.

Tipo de Operação Responsabilidade Efeito no Estado
Command Altera o estado do sistema Sim
Query Lê o estado do sistema Não

2. Criar estrutura de dados para geração de relatórios

  • Analisar quais informações são essenciais para fins de relatórios
  • Gerar estrutura de dados

3. Sincronismo

  • Após a ingestão do dado, aplicação C# jogará a mensagem no tópico
  • Criar uma nova aplicação simples apenas com método de subscriber para obter o registro e persistir na nova base analítica.

4. Desenvolver os serviços "Works"

  • Com a base analítica estruturada, desenvolver os serviços para gerar relatórios, gerar alertas, entre outros