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.