8 coisas que existem dentro de um CRUD (pelo menos)
Tags: crud, backend
Published: 2024-02-25 22:12:59


Esse post pode ser considerado básico para alguns, mas existem pessoas que querem aprender e nem sabem por onde começar ou quais termos pesquisar. Esse post é pra você.

## O que é um CRUD?

**CRUD** é o conjunto de operações básicas do mundo dev. **É o acrônimo para Create (criar), Read (ler), Update (Atualizar) e Delete (deletar)** dados. 

Um CRUD é a alma de qualquer sistema. Não interessa a IA quântica das galáxias que você usar. Se você quer registrar usuários, operações, compras, pedidos, postagens, comentários e qualquer outra coisa, o CRUD estará lá.

Logo, saber lidar com um CRUD é um ótimo primeiro passo para quem quer aprender _backend_. Se você sabe fazer um CRUD, você já deu o primeiro passo.

Mas, no mundo real, um CRUD é muito mais que automatizar queries SQL para controlar o que entra e sai de um banco de dados. E este texto é sobre isso. Vamos dar uma olhada em pelo menos 8 coisas que tem dentro de um CRUD?

## O que tem dentro de um CRUD, afinal?

### 1. Autenticação 
![](https://media1.tenor.com/m/G3008nJfz8MAAAAd/casteloratimbum.gif) 
A autenticação é como o porteiro do prédio. "Cara, crachá!" para saber quem pode ou não ter acesso as operações do CRUD. 

Você pode depositar um valor na minha conta bancária, mas não pode sacar, não é mesmo? 

**A autenticação cuida de quem pode operar cada uma das operações CRUD.** Um administrador do sistema pode muito mais do que um simples leitor, certo?

**O assunto aqui é SEGURANCA!**

- Pesquise sobre "como funciona autenticação na linguagem ou framework X". Cada uma dessas linguagens tem suas próprias ferramentas e padrões de autenticação.

### 2. Integração 

É aqui que cuidamos das famosas **APIs, ou Interfaces de Programação de Aplicações.**

Toda vez que você usa dados ou algoritmos que não estão em seu poder, você integra uma ferramenta externa via API. Desde um algoritmo de processamento de dados no Python até uma ferramenta de pagamento do PagSeguro no seu e-commerce.

O segredo aqui é fazer com que duas coisas diferentes se encaixem harmonicamente. E, para isso, **existem diversos padrões, como REST, gRPC, GraphQL,** entre outros. 

Linguagens costumam ter frameworks que abstraem a parte difícil, mas é indispensável entender coisas como protocolos HTTP, por exemplo.

Pesquise por "Como minha linguagem lida com":

- REST
- GraphQL
- gRPC
- Protocolos HTTP

### 3. Persistência 
![](https://media1.tenor.com/m/VuWKxeNCOiEAAAAd/parks-and-rec.gif)
**Persistir dados não é nada mais que salvar essas dados em um banco.**

Assim como tudo em programação, boas almas do Senhor já deixaram meio caminho andado com seus frameworks, mas eu desafio você a tentar usar o Spring JPA, por exemplo, sem ter sólidas noções de modelagem de banco de dados...

Falo por mim: tive que dar uma boa revisitada em conceitos tidos como básicos para saber onde e quais dependências injetar (e já vamos falar sobre "dependências").

Então, a primeira coisa a pesquisar são os tópicos básicos em banco de dados, depois sim, pesquise sobre frameworks.

- Modelo entidade-relacionamento
- SQL
- SQL x Bancos NoSQL
- SGBDs e suas diferenças 
- Como a minha linguagem lida com ORMs
- Como a minha linguagem lida com Migrations

### 4. Padrões de Projeto (ou Design Patterns)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k1smws8go9n2uuess4tv.gif)

Sem querer falar mal, mas se Javascript foi sua primeira linguagem, pode ter sido que você tenha aprendido que basta escrever toda a sua lógica dentro do arquivo "script.js" e tudo funcionará.

E funciona mesmo. Mas a que custo!

Quando for necessário corrigir um bug ou inserir uma feature, você não vai querer varrer um arquivo de quatro mil linhas, escrito por outra pessoa, sem saber se é aquela linha com o comentário "apagar" que está sustentando todo o sistema em pé.

É para salvar nossas vidas que os **padrões de projetos existem. MVC, MVVM, Factory, DTO são apenas alguns deles**. 

Se quiser ir além, pode pesquisar também sobre **arquitetura de software**, para entender o que são coisas como **DDD, Event Driven, Arquitetura em pipeline, camadas, microkernel, microsservicos**... Para um iniciante, basta saber que esses termos existem, para você não ficar boiando nas discussões "do Olimpo" entre os seniores. Não se preocupe tanto em aprender as minúcias, por enquanto.

- Padrões de projetos utilizados na minha linguagem.

### 5. Dependências 
![De forma alguma! Nem pense!](https://media1.tenor.com/m/N_b6y7Ym0b0AAAAd/java-schmiby.gif)
Como tenho repetido por todo o texto, muitas das soluções que utilizamos no nosso código não são nossas. E **todo o código que emprestamos de alguém é uma dependência.**

E sobre dependências, duas coisas são importantes: o gerenciamento e a injeção. 

**Gerenciar dependências**, na prática, é um arquivo que funciona como **um caderninho onde anotamos todo o código que é emprestado**. Com o detalhe de que seu código não reconheceria uma função de uma dependência que não estivesse anotada lá.

Já a **injeção de dependências é a forma como você insere o código de uma biblioteca alheia dentro do seu**. Importante entender como cada linguagem resolve isso.

- Gerenciamento de dependências na minha linguagem
- Injeção de dependências na minha linguagem.

### 6. Testes
O mundo dos testes é gigante e da pra escrever textos inteiros sobre. Mas creio que, para o início, basta entender o que são **testes unitários, testes de integração**, sua importância e como a sua linguagem lida com isso. Sempre há frameworks e bibliotecas que adiantam nosso trabalho.

- Testes unitários 
- Testes de integração 
- Ferramentas e frameworks de testes para a minha linguagem

### 7. Regras de negócio 
![](https://media1.tenor.com/m/P05ZGAEc05AAAAAC/kellykapoor-business.gif)
O que difere um CRUD do outro são as regras de negócio. Todo sistema existe, e só existe para atender uma necessidade. Cadastrar usuários, produtos, pedidos, entregas... E para cada negócio, as regras mudam. 

Em uma rede social, por exemplo, eu posso ver o que os meus colegas estão postando. Mas, em um banco, eu poderia ver quanto dinheiro eles estão depositando?

**Regras de negócio precisam atender as especificações não apenas do tipo negócio, clientes, usuários, mas da legislação vigente em cada pais, por exemplo.** Alguns filmes classificados como "livres" no Brasil sequer podem ser exibidos em países árabes. Como será que a Netflix lida com isso?

E também tem a questão de coisas que só existem em localidades especificas, como o PIX ou os endereços doidos de Brasília, por exemplo.

### 8. Infraestrutura 
Uma vez escrito, onde seu CRUD vai rodar? Se for pra rodar só na sua máquina, então tá tudo certo.

Mas se tiver que rodar em rede, você vai precisar de ferramentas como Docker, para "containerizar" seu código; Kubernetes, para orquestrar esses contêineres e entender sobre Cloud e qual cloud você pretende utilizar. Além de git e github, para manter os ciclos de integração e entrega, o famoso CI/CD.

Mas uma vez: vá aos poucos. Para fazer o básico aqui, o básico já basta.

- Git
- Github
- Docker
- Kubernetes
- Cloud
- CI/CD

## Conclusão 

Quando ouvimos "é só um CRUD", podemos partir de algo bem simples, como um código que lê algo do console e salva em um banco de dados até um backend robusto.

Meu primeiro CRUD na vida foi um código VBA que lia algumas coisas numa "msgbox" e salvava dentro de uma planilha. Simples assim. Mas o caos em que aquilo se tornou me fez entender a necessidade de muitos dos conceitos que apontei nesse texto.

Creio que este pode ser um bom guia para iniciantes. Nenhum assunto aqui foi esgotado. Dá pra se aprofundar em muitas coisas. Mas creio que esse seja um bom início.