Resumo
O que é o padrão Repository em Node.js
O padrão Repository é uma arquitetura de software que funciona como uma camada intermediária entre a lógica de negócio (Controller) e a camada de dados (banco de dados). Em vez de escrever SQL diretamente nos controladores, o Repository encapsula todas as operações de acesso a dados em uma classe dedicada, tornando o código mais organizado, testável e fácil de manter. Essa separação de responsabilidades é fundamental em projetos que buscam escalabilidade e clareza arquitetural. Ao implementar o Repository Pattern numa API REST com Node.js, o desenvolvedor reduz acoplamento, facilita testes unitários e permite trocar a implementação do banco de dados sem alterar os controladores.
Estrutura do projeto MVC com Repository
A arquitetura MVC (Model-View-Controller) em conjunto com o Repository Pattern organiza o projeto em pastas bem definidas. O Model representa a estrutura de dados, o View é a resposta HTTP em JSON, e o Controller orquestra a lógica de negócio. O Repository fica responsável por todas as operações CRUD (Create, Read, Update, Delete) contra o banco de dados. Nesta aula, cria-se um arquivo SeleçãoRepository.js que centraliza métodos como create, findAll, findById, update e delete. Essa estrutura garante que qualquer mudança na estratégia de persistência de dados afete apenas o Repository, deixando Controllers intactos e prontos para reutilização em outros contextos.
Implementação do SeleçãoRepository.js
O SeleçãoRepository.js é criado como uma classe que encapsula toda a comunicação com o banco de dados para a entidade Seleção. Os métodos principais incluem create para inserir novos registros, findAll para listar todos os itens, findById para buscar um registro específico, update para modificar dados existentes e delete para remover registros. Cada método retorna uma Promise, permitindo ao desenvolvedor trabalhar tanto com callbacks tradicional quanto com async/await. Essa implementação usa um padrão singleton, garantindo que apenas uma instância do Repository exista durante a execução da aplicação, otimizando recursos e evitando redundâncias de conexão ao banco de dados.
Removendo SQL do Controller
Um dos principais objetivos da refatoração é extrair todo código SQL dos Controllers. Originalmente, os Controllers continham consultas SQL diretas, o que misturava responsabilidades e dificultava testes. Ao transferir essa lógica para o Repository, o Controller passa a chamar apenas métodos como findAll() ou findById(), abstraindo completamente os detalhes de execução SQL. Isso resulta num Controller limpo e focado em validações de entrada, transformação de dados e tratamento de erros de negócio. O fluxo fica mais intuitivo: requisição HTTP chega no Controller, que usa o Repository para obter ou manipular dados, e retorna a resposta apropriada ao cliente.
Refatoração dos métodos do Controller
Os métodos do Controller — index, show, store, update e delete — são refatorados para trabalhar exclusivamente com o Repository. O método index passa a chamar findAll(), show chama findById(), store chama create(), update chama update() e delete chama delete(). Essa refatoração usa async/await para melhorar a legibilidade do código assíncrono, eliminando callbacks aninhados (callback hell). Cada método do Controller agora é conciso, legível e segue um padrão consistente de tratamento de erros e respostas HTTP. A mudança é estética e funcionalmente significativa, pois torna o código mais manutenível e alinhado com as boas práticas da indústria.
Trabalhando com Promises e async/await
O Repository retorna Promises naturalmente, pois operações de banco de dados são assíncronas. A aula aborda como trabalhar com essas Promises tanto de forma tradicional quanto com a sintaxe moderna async/await. O async/await melhora drasticamente a legibilidade, permitindo escrever código assíncrono que parece síncrono. Além disso, try/catch simplifica o tratamento de erros. O desenvolvedor aprende a diferenciar quando usar .then() e quando usar await, e como garantir que erros de banco de dados sejam adequadamente capturados e comunicados ao cliente através de respostas HTTP apropriadas. Essa compreensão é essencial para construir APIs robustas e resilientes.
Testando requisições no Insomnia
Após a refatoração, todos os endpoints da API REST devem ser testados para garantir que funcionam corretamente. O Insomnia é a ferramenta utilizada para fazer requisições HTTP e validar respostas. Testa-se GET em /selecoes para listar, GET em /selecoes/:id para buscar específico, POST em /selecoes com JSON no body para criar, PUT em /selecoes/:id para atualizar, e DELETE em /selecoes/:id para remover. Cada teste valida que o código de status HTTP é correto, que a resposta JSON tem a estrutura esperada, e que o banco de dados foi modificado apropriadamente. Essa validação manual no Insomnia é um passo crítico antes de implantar a API em produção.
Boas práticas e considerações finais
A aula conclui com reflexões sobre refatoração, enfatizando que éla nunca é um passo desnecessário. Refatorar para um padrão estabelecido como Repository torna o código profissional, preparado para crescimento e fácil para novos membros da equipe compreenderem. Sugere-se ajustes como padronizar nomes de métodos, adicionar validações de entrada mais robustas, implementar páginação no findAll() para grandes datasets, e considerar usar um ORM como Sequelize ou Prisma em projetos maiores. A importância de testes automatizados também é mencionada, recomendando que em projetos reais cada mudança de código seja acompanhada por testes unitários e de integração.
Recursos e continuidade do aprendizado
O código completo da aula está disponível no repositório GitHub indicado, permitindo que o desenvolvedor acompanhe cada passo e tenha uma referência pronta. A aula integra-se numa série maior sobre Node.js, consolidando conceitos de rotas Express, middlewares, import/export de módulos, estrutura de pastas e padrões de design. O desenvolvedor que completa esta aula sai com conhecimento sólido em arquitetura de backend, pronto para construir APIs profissionais e escaláveis. A continuidade natural é aprofundar em autenticação, autorização, tratamento de erros global, validação de dados com bibliotecas como Joi, e implantação em ambientes de produção.
O que você vai aprender
- Implementar o padrão Repository para separar lógica de dados do Controller
- Criar e organizar a classe SeleçãoRepository.js com métodos CRUD
- Remover SQL do Controller e centralizar no Repository
- Trabalhar com Promises e async/await para operações assíncronas
- Refatorar métodos index, show, store, update e delete para usar Repository
- Testar API REST com Insomnia após refatoração
Conceitos abordados
Tecnologias utilizadas
Capítulos 8 marcações
Próximo vídeo sugerido
Avaliações
Ainda não há avaliações. Seja o primeiro a avaliar esta aula.