Академический Документы
Профессиональный Документы
Культура Документы
1 - Entendendo CQRS
O acrônimo CQRS significa Command Query Responsibility Segregation ou, numa tradução livre, Segregação de
Responsabilidade de Consulta e de Comando, e é utilizado para aplicar modelos diferentes para operações de leitura e
gravação.
Seria algo relacionado em como separar a responsabilidade de escrever dados da responsabilidade de ler os dados.
1- Cenário clássico
Assim, o CQRS é um padrão de projeto arquitetural para separar os processos de leitura e gravação da sua aplicação. As
alterações de dados são realizados via Commands e a leitura de dados são realizados via Queries.
Nota: Commands representa tudo o que altera o estado de uma entidade (insert, update, delete). Queries não alteram
estado da entidade (select);
A utilização do CQRS é indicada para um cenário onde existe uma alta demanda de consumo de dados com operações
de leitura e escrita feitas de forma bem intensa.
Para este tipo de cenário o CQRS se apresenta como a solução da seguinte forma.
O CQRS separa leituras e gravações em modelos diferentes, usando comandos para atualizar dados e consultas para ler
dados.
Para obter um maior isolamento, você pode separar fisicamente os dados de leitura dos dados de gravação. Nesse caso, o
banco de dados de leitura pode usar seu próprio esquema de dados otimizado para consultas.
www.macoratti.net/20/08/c_cqrs1.htm 1/3
11/09/2020 ASP .NET Core 3.1 - Entendendo CQRS
Por exemplo, ele pode armazenar uma visão materializada dos dados, para evitar junções complexas ou mapeamentos
complexos de O/RM, podendo até usar um tipo diferente de armazenamento de dados.
Se forem utilizados bancos de dados de leitura e gravação separados, eles deverão ser mantidos em sincronia.
Normalmente, isso é feito com o modelo de gravação publicando um evento sempre que ele atualiza o banco de dados.
A atualização do banco de dados e a publicação do evento devem ocorrer em uma única transação.
Escala independente. O CQRS permite que as cargas de trabalho de leitura e gravação sejam escalonadas
independentemente e pode resultar em menos contenções de bloqueio;
Esquemas de dados otimizados. O lado de leitura pode usar um esquema otimizado para consultas, enquanto o
lado de gravação usa um esquema otimizado para atualizações;
Segurança. É mais fácil garantir que apenas as entidades de domínio corretas estejam executando gravações nos
dados;
Separação de responsabilidades. A segregação dos lados de leitura e gravação pode resultar em modelos mais
flexíveis e fáceis de manter. A maior parte da lógica de negócios complexa entra no modelo de gravação. O modelo
de leitura pode ser relativamente simples;
Consultas mais simples. Ao armazenar uma visualização materializada no banco de dados de leitura, o aplicativo
pode evitar junções complexas durante a consulta.
Complexidade. A ideia básica do CQRS é simples. Mas isso pode levar a um design de aplicativo mais complexo,
especialmente se eles incluírem o padrão Event Sourcing.
Nota: A ideia fundamental do padrão Event Sourcing é garantir que todas as alterações no estado de um aplicativo
sejam capturadas em um objeto de evento e que esses objetos de evento sejam armazenados na sequência em que
foram aplicados pelo mesmo tempo de vida útil do estado do aplicativo.
Mensagens. Embora o CQRS não exija mensagens, é comum usar mensagens para processar comandos e publicar
eventos de atualização. Nesse caso, o aplicativo deve lidar com falhas de mensagens ou mensagens duplicadas.
Consistência eventual. Se você separar os bancos de dados de leitura e gravação, os dados de leitura podem ficar
obsoletos. O armazenamento do modelo de leitura deve ser atualizado para refletir as alterações no
armazenamento do modelo de gravação e pode ser difícil detectar quando um usuário emitiu uma solicitação com
base em dados de leitura obsoletos;
- Domínios colaborativos em que muitos usuários acessam os mesmos dados em paralelo. O CQRS permite definir
comandos com granularidade suficiente para minimizar conflitos de mesclagem no nível do domínio, e os conflitos que
surgem podem ser mesclados pelo comando.
www.macoratti.net/20/08/c_cqrs1.htm 2/3
11/09/2020 ASP .NET Core 3.1 - Entendendo CQRS
- Interfaces de usuário baseadas em tarefas em que os usuários são guiados por um processo complexo como uma série
de etapas ou com modelos de domínio complexos.
- Cenários em que o desempenho das leituras de dados deve ser ajustado separadamente do desempenho das gravações
de dados, especialmente quando o número de leituras é muito maior que o número de gravações.
- Cenários em que uma equipe de desenvolvedores pode se concentrar no modelo de domínio complexo que faz parte do
modelo de gravação e outra equipe pode se concentrar no modelo de leitura e nas interfaces do usuário.
- Cenários em que o sistema deve evoluir ao longo do tempo e pode conter várias versões do modelo ou em que as
regras de negócios mudam regularmente.
- Integração com outros sistemas, especialmente em combinação com a fonte de eventos, em que a falha temporária de
um subsistema não deve afetar a disponibilidade dos outros.
Assim, considere a aplicação do padrão CQRS em seções limitadas do seu sistema, onde ele poderá ser mais valioso.
fonte: https://docs.microsoft.com/pt-br/azure/architecture/patterns/cqrs
"Porque o reino de Deus não é comida nem bebida, mas justiça, e paz, e alegria no Espírito Santo."
Romanos 14:17
Referências:
www.macoratti.net/20/08/c_cqrs1.htm 3/3