CQRS, direto ao ponto

Ð̸aniel ₿elintani
2 min readJan 3, 2022

Com todo o seu charme, essa é daquelas expressões em inglês que arrepia a espinha de qualquer iniciante, e que todo profissional quando compreende o conceito, repete com orgulhos nos olhos. (veja como é a pronúncia)

CQRS é a abreviação de Command and Query Responsibility Segregation.\

O que isso quer dizer?

Não misture “leitura dos dados” com “gravação dos dados”!

Quando usar

Sempre que possível. O “papo” de over-engineering não se encaixa tão bem aqui, uma vez que não é tão complexo assim.
Claro, sem hipocrisia, numa distribuição orientada à microservices, existe chance de ser um trabalho chato e menos justificável.

Como implementar

Existem duas técnicas, no qual vi ser as mais comuns:

1 — Criando classes distintas, separando propriedades editáveis de dados disponíveis para consulta.

public class CreatePlayer
{
public string Name { get; set; }
public string Alias { get; set; }
public string DefaultPassword { get; set; }
}

public class UpdatePlayer
{
public string Name { get; set; }
public string Alias { get; set; }
public string Password { get; set; }
}

public class FindPlayer
{
public Guid ID { get; set; }
public string Name { get; set; }
public string Alias { get; set; }
public DateTime CreatedTime { get; set; }
}

2 — Separando acessos distintos de leitura e escrita, de preferência com credenciais diferentes para acesso à base de dados.

Um método deve ser Command ou Query, nunca ambos.
Command se refere às funções de criação, alteração ou exclusão.
E por eliminação, Query são as consultas.

Benefícios

- Princípio da responsabilidade única

Ao separar os métodos, já encontrará o código quebrado para uma única responsabilidade, o que facilitará na implementação de cobertura de testes, e também na própria manutenção.

- Dimensionamento Independente

Caso tenha um software com mais requisições de leituras do que gravação, é ideal usar dois bancos de dados separados, podendo dimensionar os seus modelos de forma independente.

Além disso, podemos desnormalizar o banco de dados de leitura, o que resultará em consultas simples, junções menos complexas, e tempo de resposta rápido.

- Separação de preocupação

As regras de persistência e atualização dos dados não irão influenciar nas consultas, e entregar credenciais distintas trará menores preocupações no acesso aos dados.
Não basta estar blindado ao “ sql-injection “, mas também a atenção para erros humanos, o que acontece com frequência em projetos de objetos dinamicamente mapeados por um ORM.

CQRS é simples, mas que traz preocupações reais do mundo corporativo, e este conceito será referenciado em outros textos futuros, principalmente sobre tópicos relacionados à segurança da informação.

Originally published at https://belintani.com on January 2, 2022.

--

--