Descubra como organizar o código de um projeto e criar um CRUD de categorias utilizando boas práticas de arquitetura e organização. Aprenda a separar a regra de negócio, modularizar o desenvolvimento e otimizar a estrutura do projeto.
Organizando o código e criando um CRUD de categorias
Neste vídeo, o instrutor começa a organizar melhor o código do projeto, visando separar a regra de negócio e tornar o desenvolvimento mais modular. O foco é criar um CRUD (Create, Read, Update e Delete) simples de categorias, aplicando boas práticas de organização de código e arquitetura.
- Separação da regra de negócio para tornar o desenvolvimento mais modular
- Foco na criação de um CRUD simples de categorias
- Aplicação de boas práticas de organização de código e arquitetura
Separando o app da index.js
Inicialmente, o instrutor identifica que todo o código do app Express estava concentrado no arquivo index.js. Isso não é uma boa prática, pois a index.js deve ter a responsabilidade apenas de iniciar e configurar o app, não implementar a regra de negócio. A primeira refatoração realizada foi mover o código do app para um novo arquivo src/main.js.
- Identificação da concentração do código do app Express no arquivo index.js
- Necessidade de separar a responsabilidade de iniciar e configurar o app da implementação da regra de negócio
- Refatoração inicial com a movimentação do código do app para um novo arquivo src/main.js
Criando estrutura de módulos
Em seguida, o instrutor cria uma estrutura de pastas e arquivos para representar os módulos (funcionalidades) da aplicação. Foi criada a pasta src/modules, e dentro dela a pasta categories, representando o módulo de categorias. Dentro de categories foi criado o arquivo categories.route.js, que irá concentrar todas as rotas relacionadas ao CRUD de categorias.
- Criação de uma estrutura organizada de pastas e arquivos para representar os módulos da aplicação
- Criação da pasta src/modules para abrigar os módulos
- Criação da pasta categories como representação do módulo de categorias
- Criação do arquivo categories.route.js para concentração das rotas relacionadas ao CRUD de categorias
Configurando rotas de categoria
No arquivo categories.route.js foi implementada uma rota simples /categories retornando um JSON de teste.
- Implementação de uma rota simples /categories no arquivo categories.route.js
- Retorno de um JSON de teste pela rota /categories
Importação de rotas no app
Foi criado o arquivo src/routes/index.js para importar todas as rotas dos módulos e configurá-las no app. Este arquivo recebe o app por parâmetro e importa o módulo de categories.route.js, passando o app para ele. No main.js, basta importar esse arquivo de rotas e passar o app como parâmetro.
- A estrutura de importação de rotas no app segue o padrão de contexto, evitando a necessidade de instanciar um novo app em outros arquivos.
- O arquivo index.js centraliza a importação e configuração de todas as rotas dos módulos no app.
- O arquivo index.js recebe o app por parâmetro e importa o módulo de categories.route.js, facilitando a organização e manutenção das rotas.
Vantagens da estrutura de rotas
A estrutura traz várias vantagens, como código mais organizado e facilmente mantido, fácil visualização e separação das responsabilidades, concentração de rotas por contexto em seus respectivos módulos, rota principal limpa e simplificada, e facilidade na adição de novos módulos e rotas.
- A estrutura proporciona um código mais organizado e de fácil manutenção.
- Permite a fácil visualização e separação das responsabilidades, facilitando a compreensão do fluxo das rotas.
- As rotas são concentradas por contexto em seus respectivos módulos, o que contribui para uma melhor organização do código.
- A rota principal fica mais limpa e simplificada, facilitando a compreensão do fluxo do aplicativo.
- A estrutura facilita a adição de novos módulos e rotas, contribuindo para a escalabilidade do projeto.
Criação do CRUD de Categorias
Após organizar a estrutura do projeto, o foco passa a ser a criação do CRUD de categorias. O primeiro passo é criar o model de Categoria, representando os dados que uma categoria possui. Em seguida, foi criado o controller categories.controller.js, também dentro do módulo de categories.
- Após a organização da estrutura do projeto, o próximo passo é a criação do CRUD de categorias.
- O primeiro passo é criar o model de Categoria, que representa os dados que uma categoria possui.
- Em seguida, é criado o controller categories.controller.js, que também está localizado dentro do módulo de categories.
Model de Categoria
Foi criado o arquivo categories.model.js dentro do módulo de categories para definir o schema da categoria, incluindo os campos id, title e slug. O Mongoose foi utilizado para definir o schema, e o model foi exportado.
- O arquivo categories.model.js define o schema da categoria, incluindo os campos id, title e slug.
- Foi utilizado o Mongoose para definir o schema da categoria, garantindo a consistência e validação dos dados.
- O model da categoria foi exportado, tornando-o disponível para uso em outras partes do projeto.
Controller de Categorias
O controller categories.controller.js foi criado para gerenciar as operações relacionadas às categorias, como criar, ler, atualizar e deletar categorias. Este controller é responsável por lidar com a lógica de negócios relacionada às categorias.
- O controller categories.controller.js gerencia as operações relacionadas às categorias, como criar, ler, atualizar e deletar categorias.
- É responsável por lidar com a lógica de negócios relacionada às categorias, mantendo a separação de responsabilidades no projeto.
Implementação das regras de negócio
O controller é responsável por implementar as regras de negócio, fazendo a ponte entre a camada de rotas e o model. Foram implementados métodos para cada operação do CRUD: Store, Index, Show, Update e Destroy. O controller recebe o model de categoria por parâmetro e exporta esses métodos.
- O controller desempenha um papel crucial na implementação das regras de negócio em um aplicativo web.
- Os métodos CRUD foram implementados para lidar com as operações de criação, leitura, atualização e exclusão de categorias.
- A separação de responsabilidades entre o controller e o model é uma prática recomendada para manter a organização e a escalabilidade do código.
Conexão do controller nas rotas
O arquivo de rotas categories.route.js importa o controller e conecta os métodos às rotas REST correspondentes: POST /categories -> store, GET /categories -> index, GET /categories/:id -> show, PUT /categories/:id -> update, DELETE /categories/:id -> destroy. Para realizar os testes, algumas rotas recebem um retorno JSON estático, que posteriormente será substituído pelos dados do model.
- A conexão entre o controller e as rotas é essencial para direcionar as requisições HTTP para as operações apropriadas.
- A utilização de retornos JSON estáticos para testar as rotas é uma prática comum no desenvolvimento de APIs antes da integração com o banco de dados.
Testando o CRUD
O instrutor testa o CRUD utilizando ferramentas como Postman e Insomnia para simular as requisições, obtendo sucesso em todas as operações. Os próximos passos envolvem integrar uma camada de serviço para não expor o model diretamente na controller, adicionar validações e continuar desenvolvendo os demais módulos.
- A realização de testes utilizando ferramentas como Postman e Insomnia é uma prática recomendada para garantir o funcionamento correto das operações CRUD.
- A integração de uma camada de serviço pode melhorar a segurança e a manutenibilidade do código ao não expor diretamente o model na controller.
Conclusão
Ao aplicar importantes conceitos de organização de código e arquitetura, foi possível criar um CRUD simples porém robusto e escalável. A estrutura montada facilitará a manutenção e adição de novas funcionalidades ao projeto, promovendo uma melhor experiência de desenvolvimento.