arthurrschaefer / dev101

Repository to learn how to code by scratch
https://dev101.vercel.app
0 stars 0 forks source link

Architecture and Folders Proposal #4

Closed arthurrschaefer closed 4 months ago

arthurrschaefer commented 4 months ago

The proposal was started with this issue on the original repository.

The idea is to have the folder as close as possible to the root folder, but making it easier to change frameworks - if needed at some point.

Here's the discussion.

Here's the explanation.

Então isso aqui é o começo de um projeto Next.js, correto?

📦 root
 ┣ 📂 pages        // Páginas Web + API

Importante notar que hoje o projeto tem uma pasta css na raiz, mas como estamos usando o custom page extensions, podemos mover para pages tudo que é relacionado a páginas mesmo:

📦 root
 ┣ 📂 pages
 ┃ ┣ 📂 css      // Arquivos de estilização

E querendo ou não, para arquivos estáticos e públicos, a única forma padrão atualmente fornecida pelo Next.js é criar uma pasta public no root do projeto, então, lá vai mais uma pasta na raiz:

📦 root
 ┣ 📂 pages
 ┣ 📂 public        // Arquivos estáticos e públicos, como `robot.txt`

O projeto já conta com uma pasta de scripts soltos, então fica aqui ela representada também:

📦 root
 ┣ 📂 pages
 ┣ 📂 public
 ┣ 📂 scripts        // Scripts do tipo que usamos para baixar avatares

Os nossos Models ou Entities (até hoje não entendo a diferença, mas estou a caminho de aprender, principalmente a parte de "use cases"), podem ficar na raiz também para fácil acesso (fora que podemos usar os alias do Framework):

📦 root
 ┣ 📂 pages
 ┣ 📂 public
 ┣ 📂 scripts
 ┣ 📂 models        // Principais regras de negócio
 ┃ ┣ 📜 post.js
 ┃ ┣ 📜 post.test.js
 ┃ ┣ 📜 user.js
 ┃ ┗ 📜 user.test.js

E nota que os testes estão junto destas unidades de funcionalidade e sugiro fazer a mesma coisa para o pages, mas mesmo assim iremos precisar de alguns utilitários de testes, talvez dados mockados, e que poderão ficar numa pasta separada tests.

📦 root
 ┣ 📂 pages
 ┣ 📂 public
 ┣ 📂 scripts
 ┣ 📂 models
 ┣ 📂 tests        // Arquivos auxiliares dos testes

De qualquer forma, o assunto testes é algo gigantesco, e muitas vezes vale a pena separar tudo numa pasta tests e organizar lá, pois ao invés de consolidar todos os testes em um único arquivo, por exemplo post.test.js, fica mais completo separar em vários arquivos de teste, e cada um explorando as condições por um ângulo.

Outra pasta importante é a que vai tocar diretamente em pontos da infraestrutura, como persistência através do conector de um banco de dados, cache através do conector de um Redis, Migrations, ou até uma pasta para automações da infraestrutura (baseando no que o @huogerac está fazendo em outra issue)

📦 root
 ┣ 📂 pages
 ┣ 📂 public
 ┣ 📂 scripts
 ┣ 📂 models
 ┣ 📂 tests
 ┣ 📂 infra        // Conectores, migrações e automações da Infraestrutura
 ┃ ┣ 📂 devops
 ┃ ┣ 📂 migrations
 ┃ ┗ 📜 postgres.js

E turma, dá pra ir jogando esse xadrez e tentando pensar em mais movimentos para frente, mas não sei se vale a pena. Acho que vale a pena irmos concretizando essas coisas e vendo se nossas ideias cabem nessa organização e ir mudando e sentindo para onde o projeto irá nos levar.