[Conceito] - CQRS
Published: 2022-04-26 02:18:13

> Conteúdo original [nessa thread do Twitter](https://twitter.com/zanfranceschi/status/1518774121076695041)

---

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](https://pbs.twimg.com/media/FRPFA05VkAA2Bn5?format=png&name=small)

---

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](https://pbs.twimg.com/media/FRPFBLCUYAALG9S?format=jpg&name=small)

---

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](https://pbs.twimg.com/media/FRPFBt8VUAEpsbC?format=jpg&name=small)

---

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](https://pbs.twimg.com/media/FRPFCUQUYAA9Tok?format=jpg&name=900x900)

---

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](https://pbs.twimg.com/media/FRPFC8HVUAABAXk?format=jpg&name=small)

---

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](https://pbs.twimg.com/media/FRPFDWAVEAEXsoU?format=jpg&name=small)

---

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](https://pbs.twimg.com/media/FRPFDu1VEAAqS8p?format=png&name=small)

---

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](https://martinfowler.com/eaaDev/EventSourcing.html)

---

Segue um link que explica sobre CQRS de outra forma.

[https://martinfowler.com/bliki/CQRS.html](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! ❤️