CQRS — Patterns para sistemas distribuídos e escaláveis… Com pitadas de filosofia, humor e sarcasmo como me é peculiar.
CQRS
Command Query Responsability Segregation
Por Zeus Sócrates, está falando inglês ? O que é isso ?
Segregação de responsabilidades entre consultas e comandos.
Definição literal, não deixa muita margem para dúvidas…
“Mas como assim Carly, segregação de responsabilidades ?”
Perceba que quem consulta ou comanda, o faz sobre algo ou alguém. Se aqui falamos sobre um Pattern para sistemas distribuídos, falamos então dessas aplicações. De modo que, é perfeitamente cabível acrescentar e dizer: “Segregação de responsabilidades entre consultas e comandos no servidor”
Perfeito até aqui ? Entendido…
“Mas Carly, o que são consultas e comandos ?”
De fato, eu sei a quem me dirijo, mas como discernir entre um e outro ?
Me acompanhe…
Consultar pressupõe dúvida. Porque se não há dúvida, não há razão para consultar. Então se tenho dúvida, procuro resposta. E ao que a resposta responde ? A Pergunta.
Não seja o chato que diz: “Carly e a dúvida?”
Naturalmente, a resposta está para pergunta, assim como o conhecimento que permite responder está para a dúvida que gera a pergunta.
Perfeito? Entendido até aqui ?
Consultar é Perguntar.
Fez uma pergunta ao servidor: Query.
“Carly e Command ?”
Oras, muito simples…
Anote para não esquecer…
Command é tudo que não é Query.
E o que é query ? uma pergunta ao servidor.
Por tanto, toda requisição recebida que é uma pergunta é uma query. Todo o resto é command.
“E pq isso Carly?”
Naturalmente você não pode perguntar e comandar… Pq se a pergunta necessita da dúvida para existir, comandar pressupõe que você tem certeza para deliberar.
Logo, se pergunta e comanda, pergunta sobre algo que não faz parte do seu comando e por tanto, não deveriam coexistir no mesmo instante e local, pois pertencem a razões diferentes.
Eu poderia deixar-se entender pela explicação acima, mas vamos trazer para o contexto de software.
Uma requisição que consulta um usuário não deveria coexistir na mesma aplicação que um comando que cria um usuário… São razões diferentes.
É isso, espero que tenha trazido luz ao conceito e que havendo interesse maior, mergulhe e se aprofunde sobre o pattern de forma que praticando-o possa faze-lo solução para alguns problemas e dilemas da nossa área de engenharia de software.
Eu fico por aqui e meu muito obrigado.