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
- Microsoft Docs — CQRS Pattern (Cloud Design Patterns)
- Greg Young — CQRS Documents and Presentations
- Udi Dahan — Commands, Events and Responsibilities
⚙️ 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