Arquitetura de projetos React com diferentes módulos

Nesse post vou falar como eu organizei três aplicações em uma.

Hoje eu vou falar como eu fiz para organizar o iDoctor, que é uma aplicação que estou desenvolvendo para o meu TCC. Essa aplicação possuí três diferentes níveis de usuários: Médico(a), Secretário(a) e Administrador(a). E cada um deles possui uma aplicação diferente, com componentes, rotas, páginas, específicas para cada uma delas. Então para não criar uma bagunça dentro do código segui a abordagem que vou mostrar para você.

Mas antes de começar, deixa eu te explicar o que é o projeto

Resumidamente o iDoctor é um SaaS (Software as a Service) para gerenciamento de clinicas médicas, com o propósito de trazer um sistema simples e fácil de se utilizar.

Agora uma informação importante:

O projeto foi iniciado utilizando o create-react-app que gera para nós um boilerplate básico, contendo na raiz arquivos como .gitinore, package.json, README.md, e também gera as pastas public e src, onde manteremos o código da aplicação. Então caso você tenha alguma dúvida, recomendo dar uma lida na documentação acessando aqui.

Bora para o que interessa, como que eu estruturei o projeto?

Primeiramente eu separei a aplicação em módulos, criando um módulo para cada nível de usuário:

Criei uma pasta para cada módulo dentro da src/ que ficou dessa forma:

Dentro de cada modulo eu criei as seguintes pastas:

  • assets/
  • components/
  • pages/
  • routes/

Cada pasta dessa contém arquivos que só serão utilizados pelo módulo em si, nada que estiver dentro delas é compartilhado com outros módulos.

Mas ai você deve estar se perguntando, e os arquivos que são reutilizáveis?

Então vamos lá, além da pasta modules/, eu criei uma pasta shared/que contém tudo aquilo que é reutilizável dentro da aplicação, e ela ficou com essa estrutura:

Tudo o que é reutilizável fica ai dentro!

Agora vou te mostrar como ficou as rotas:

O arquivo de rotas ficou com a principal tarefa, que é de redirecionar o usuário para a rota que ele tem permissão, e eu tentei fazer da maneira mais simples possível:

Para cada user.type ele chama um arquivo de rotas que está dentro do módulo específico, ou seja, só as rotas daquele módulo vão ser visíveis para o browser, simples né?!

O arquivo de rotas dentro do módulo também ficou simples:

E é basicamente isso, tentei deixar a aplicação com uma estrutura bem simples, porque, convenhamos, pegar uma aplicação com aquelas estruturas extremamente complexas que dão voltas e voltas para resolver o mesmo problema é um pouco chato né?!

Esse é um print da estrutura final:

Bem clean né?!

Repositório: https://github.com/vinniciusgomes/idoctor

Bom, é isso, espero que tenha gostado!

Se gostou, dê 1 ou 50 claps 👏

Obrigado pela leitura!

Me acompanhe por ai! 😜

- Portfólio: vinniciusgomes.dev
- GitHub: @vinniciusgomes
- LinkedIn: @vinniciusgomes

Senior Software Engineer | React enthusiast | Love traveling and Mountain Bike. See more about me — vinniciusgomes.dev

Senior Software Engineer | React enthusiast | Love traveling and Mountain Bike. See more about me — vinniciusgomes.dev