Categorias
backend

Desafio 6 CRUDs MongoDB em 2 semanas

Fiz 6 projetos de CRUD MongoDB, ao longo de 10 dias, com o objetivo de consolidar o meu aprendizado. E compartilho aqui a evolução e as lições aprendidas.

Apresentação

Prazer, Simara Conceição! Eu sou desenvolvedora grad na ThoughtWorks, professora na {reprograma} e criadora do Podcast Quero Ser Dev.

Gif Yeah

Iniciei minha migração para área de tecnologia em 2019, você pode conhecer essa história completa ouvindo o quero ser dev.

Motivação para criar esse desafio

Fui convidada para ensinar na Reprograma para mais de 40 mulheres iniciantes em backend como criar um CRUD MongoDB usando o mongoose.

E toda vez que estou me preparando para uma aula eu fico imersa no conteúdo pensando em construir a melhor experiência possível para minhas queridas alunas.

Eu embarquei nesse desafio, pois acredito que não há nada que a gente saiba tão pouco que não possa compartilhar.

Quando conheci MongoDB

Eu tenho uma história engraçada sobre como me apaixonei pelo MongoDB, rs.

Em 2020, antes de entrar na TW eu apliquei pra lá em uma vaga de dev full stack. Lembro que a entrevista foi em inglês e com uma colaboradora baseada em NYC e uma das primeiras perguntas foi: você já usou nossa ferramenta?

E eu bem garota, faceira, ousada, iniciante mais que tudo respondi que não havia ainda tido a oportunidade de usar, mas que era uma entusiasta.

Fui reprovada, óbvio, rs. A verdade é que eu tinha ficado feliz demais só de ter sido considerada para vaga, ao ser convocada para essa primeira entrevista.

Saí de lá decidida a usar o MongoDB em meus projetinhos de estudo e ganhar mais maturidade em padrão de projeto e melhores práticas de desenvolvimento.

Afinal de contas, eu queria carreira em uma empresa global, que tivesse um programa explicito de diversidade e de desenvolvimento para as pessoas colaboradoras.

Fico feliz de ter alcançado tudo isso aqui na empresa que estou atualmente, a gente só consegue conectar os pontos olhando pra trás, já dizia Jobs. <3

O que é um CRUD?

Pra quem tá chegando agora, CRUD é um acrônimo para Create, Read, Update e Delete(criação, consulta, atualização e remoção de dados). São as 4 operações principais em um banco de dados.

Resumo de cada CRUD que criei :

  1. Primeiro: Cadastro de inscritos no canal
  2. Segundo: Cadastro de episódios de podcast
  3. Terceiro: Cadastro de filmes
  4. Quarto: Cadastro de livros
  5. Quinto: Cadastro de séries
  6. Sexto: Cadastro de estudios e títulos

As informações de ferramentas utilizadas, requisitos, arquitetura e também os códigos, você encontra aqui nesse repositório: https://github.com/simaraconceicao/node-mongo-mongoose

 Lições aprendidas

 Procurando direitinho tem muito conteúdo incrível no youtube

A ideia original desses projetinhos foram retiradas desse tutorial do canal Web Dev Simplified. Obrigada Kyle! haha

Build A REST API With Node.js, Express, & MongoDB – Quick

Já a parte de relacionamento, eu me inspirei nesse vídeo aqui da Rocketseat. Valeuu, Diego! rs

API NodeJS + Express + Mongo – CRUD e relacionamentos com MongoDB

Eu fiz o projeto 1 acompanhando o tutorial do Kyle e a partir do projeto 2 fui implementando e modificando conforme meu repertório ia deixando, rs.

Para ter embasamento teórico assisti aulas de de data driven, aulas de conceitos, mapa mental sobre tipos de bancos de dados. Aqui está um comparativo entre SQL e NoSQL:

NoSQL

Surgiu no final dos anos 90 e como uma alternativa de natureza não relacional.

Possuem alta escalabilidade e desempenho.

Alguns tipos de bancos de dados não relacional: armazenamento de chave-valor, armazenamento column family, orientado a grafos e orientado a documentos.

SQL

RDBMS ou Sistema de Gerenciamento de Banco de Dados Relacional, armazenam dados em um formato estruturado, usando linhas, colunas e tabelas.

Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é a linguagem de pesquisa declarativa padrão para banco de dados relacional.

Geralmente demanda distribuição vertical de servidores, o que gera mais custo, pois quanto mais dados, mais memória e mais disco um servidor precisa.

Aqui está um comparativo dos termos MongoDb e SQL:

| MongoDB | SQL |
| — | — |
| `database` | database|
| `collection` | table|
| `document` | row|
| `field` | column|
| `lookup` | table joins|

Referência: https://docs.mongodb.com/manual/reference/sql-comparison/

Repetição é importante demais

A cada dia, ficava mais fluído entender a responsabilidade de cada arquivo, a lógica de cada função do CRUD, percebia os comportamentos e conseguia lidar melhor com os erros também.

Mas Simara, faz sentido criar basicamente o mesmo projeto 6 vezes? Faz muito sentido! De tanto repetir, eu comecei a não precisar consultar o tutorial ou algum projeto meu anterior.

O último então fluiu que só. Consegui desenhar toda a estratégia de como compartilhar o conhecimento com as meninas, comparando com o que elas já viram antes conectando pontos para o entendimento fluir melhor.

Começando com o MongoDb

Os dados são armazenados no formato que se parece muito com JSON, o que é uma grande facilidade para quem já programa com Javascript.

Podemos usar o Mongo pelo serviço de nuvem(cloud) ou localmente fazendo o download para nossa máquina (eu usei essa opção) e ainda é possível integrar as 2 formas.

Além disso, o Mongo possui seu driver com suas próprias queries(comandos para interação com o banco que se assemelham muito com javascript com orientação a objeto), podemos também usar uma interface gráfica(usei o MongoDb Compass) e ainda podemos usar um ODM, ferramenta que mapeia entre nosso objeto e a db(usei o mongoose).

Teste, teste e teste

Eu não criei uma estratégia de testes, mas fiz testes manuais com Insomnia e tratei os possíveis erros para retornar status e mensagens coerentes.

Não usei o driver do MongoDB, usei a interface gráfica MongoCompass para verificar se meus dados estavam salvando direitinho.

Mongoose faz um meio de campo lindão entre nosso projeto e o MongoDb

Sabe quando a gente inventa de editar uma foto no photoshop, mesmo sabendo que existem filtros prontos que fazem um ótimo trabalho? Então usar o mongoose é apelar para templates prontos, lindos e rápidos.

– Mas muita atenção, pois a comunicação dele com o MongoDB é feita de forma assíncrona.
– Passando nossa string de conexão e informações default é possível fazer a Criação da conexão com a db e também tratar os erros.
– Mas o melhor de todos os pontos, é que ele cria nosso model, informando exatamente como nossos documentos e collections serão. <3

 Separar as responsabilidades faz sentido demais

A partir do terceiro projeto fui percebendo o quanto os arquivos de server e de routes estava ficando densos e estranhos com tantas informações, dessa forma modularizei melhor e separei a minha lógica. Você pode perceber a diferença do primeiro para o último.

Compartilhar conhecimento/vivência é disparada a melhor maneira para aprender de forma eficiente

Repito: não há nada que a gente saiba tão pouco que não possa compartilhar.

Estou em constante aprendizado, nessa minha rotina de transição, mas eu só tenho segurança pra dizer que entendi algo de verdade depois que eu compartilho esse conhecimento.

Além disso, compartilhar é uma troca linda e eu sempre aprendo muito com essas vivências. <3

Próximos passos

Quero me aventurar com infra e fazer o deploy de algum desses CRUDs, permitindo de forma pública as integrações e também penso em implementar uma estratégia de testes automatizados.

É isso, pessu! Me enviem feedbacks sobre esse artigo e sobre essa minha forma de estudar.Vou amar trocar ideias com vocês. Até a próxima!

Um comentário a “Desafio 6 CRUDs MongoDB em 2 semanas”

Nossa Simara, vc é a pessoa que me inspira a querer estudar tecnologia, estou vivenciando essa situação nesse momento como criar uma API com essas quatro operações. Muito obrigada por compartilhar os seu modo de estudo, vou seguir direitinho td o que vc colocou aqui e sei que logo logo vou poder dizer que compreendi pra que serve e como faz uma API. Vc é um anjo, que Deus continue te abençoando bjs

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *