Esta arquitetura organiza o projeto por funcionalidades (features) em vez de separar arquivos apenas por tipo.
O objetivo é tornar projetos grandes mais organizados, previsíveis e escaláveis.
project-name/
│
├── public/
│
├── src/
│
│ ├── assets/
│ │ ├── images/
│ │ └── icons/
│ │
│ ├── features/
│ │
│ │ ├── auth/
│ │ │ ├── components/
│ │ │ │ └── LoginForm.jsx
│ │ │ │
│ │ │ ├── hooks/
│ │ │ │ └── useAuth.js
│ │ │ │
│ │ │ ├── services/
│ │ │ │ └── authService.js
│ │ │ │
│ │ │ └── pages/
│ │ │ └── LoginPage.jsx
│ │ │
│ │ ├── products/
│ │ │ ├── components/
│ │ │ │ └── ProductCard.jsx
│ │ │ │
│ │ │ ├── services/
│ │ │ │ └── productService.js
│ │ │ │
│ │ │ └── pages/
│ │ │ └── ProductsPage.jsx
│ │
│ ├── shared/
│ │ ├── components/
│ │ │ └── Button.jsx
│ │ │
│ │ ├── hooks/
│ │ │ └── useFetch.js
│ │ │
│ │ └── utils/
│ │ └── formatCurrency.js
│ │
│ ├── layouts/
│ │ └── MainLayout.jsx
│ │
│ ├── styles/
│ │ └── global.css
│ │
│ ├── App.jsx
│ └── main.jsx
│
├── package.json
└── README.md
Uma feature representa uma funcionalidade completa da aplicação.
Exemplos:
Cada feature contém tudo que precisa para funcionar.
featuresCada pasta representa uma funcionalidade da aplicação.
Exemplo:
features
├── auth
└── products
Isso evita que o código da aplicação fique espalhado por muitas pastas diferentes.
sharedContém código reutilizável por várias features.
Exemplos:
Se o código pertence a uma funcionalidade específica, ele deve ficar dentro da pasta dessa feature.