DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on • Updated on

[Conceito] - CQRS

Conteúdo original nessa thread do Twitter


Ei dev,

Quer conhecer a história da @RaiiCorreia e como o CQRS melhorou sua vida? Acompanha esse fio que vc vai terminar essa thread abafando sobre o que é CQRS e vai fazer muito sucesso nas festas de crianças e almoços em família!

cc @sseraphini

🧵

img


Raissa é uma mulher muito bonita e por isso recebia muitas DMs pra possíveis contatinhos. Como era muito educada, sempre conversava e guardava os contatos dos pretendentes – nunca se sabe o dia de amanhã, né?

img


Raissa tinha muitas amigas e muitas delas eram super encalhadas. Como Raissa era uma boa pessoa, sempre repassava seus contatinhos para suas amigas. O problema é que não bastavam ser encalhadas, algumas amigas eram bem exigentes e queriam contatinhos bem específicos. 🙄

img


O problema é que aquilo consumia muito Raissa. Ela ficava cansada de misturar as requisições que alteravam o estado de seu banco de dados – os comandos –, e as requisições de consultas – as queries.

img


Raissa então lembrou-se de ter ouvido numa festa super descolada alguém falar sobre CQRS e que aquilo significava Command/Query Responsibility Segregation. Ou seja, Separação da Responsabilidade de Comandos e Consultas.

Os olhos de Raissa se encheram de esperança. 🥲


Logo começou a modelar sua aplicação e bancos para que as consultas e comandos ficassem em lugares diferentes, inclusive em bancos diferentes para que pudessem escalar de forma independente.

img


Ainda faltava uma peça para que tudo se encaixasse em seu novo desenho. Raissa então desenvolveu um componente capaz de realizar a sincronização entre os modelos de comando e consulta – algo simples capaz de atender sua demanda imediata.

img


Após ter colocado sua nova aplicação em produção, Raissa se sentiu livre e satisfeita pois poderia atender as demandas dos novos contatinhos e de suas amigas exigentes e encalhadas. E o melhor de tudo, de forma independente e escalável!

img


Claro, esse é um exemplo super simples sobre o que é CQRS, mas a ideia fundamental realmente é separar os modelos de consultas e de comandos. É uma ideia simples, no final das contas.


O banco não precisa ser necessariamente separado – separar em tabelas poderia ser um primeiro passo, por exemplo. Assim como a aplicação que poderia ser separada em duas unidades de deploy em vez de uma.

CQRS não dita sobre separações lógicas e físicas – isso cabe a você.


Lembre-se de que quanto mais desacoplados, possivelmente mais complexos e também escaláveis seus sistemas podem ser.

É tudo uma questão de trade-off e bom senso.


Algo que não mencionei nessa thread é sobre Event Sourcing. Event Sourcing é comumente associado a CQRS, mas essas duas técnicas podem ser aplicadas separadamente. Não acredite que uma dependa da outra, ok?

https://martinfowler.com/eaaDev/EventSourcing.html


Segue um link que explica sobre CQRS de outra forma.

https://martinfowler.com/bliki/CQRS.html


Não preciso nem dizer, né? Dá um abraço por ter lido até aqui, vai 🤗

E @RaiiCorreia, obrigado demais por ter topado esse mico de ser a protagonista dessa thread! ❤️

Discussion (0)