CQRS, direto ao ponto

belintani

Ð̸aniel ₿elintani

Posted on January 3, 2022

CQRS, direto ao ponto

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; }
    }
Enter fullscreen mode Exit fullscreen mode

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.

💖 💪 🙅 🚩
belintani
Ð̸aniel ₿elintani

Posted on January 3, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Authentication events and commands
opensource Authentication events and commands

August 22, 2022

CQRS, direto ao ponto
programming CQRS, direto ao ponto

January 3, 2022