Skip to content

Visao Geral da Arquitetura

Nota sobre Framework

Os exemplos abaixo utilizam os padroes do pack Vue 3. Cada framework pack (React, Next.js, SvelteKit) fornece padroes equivalentes adaptados ao seu ecossistema. Veja Framework Packs para detalhes.

O docs/ARCHITECTURE.md no seu projeto e a fonte de verdade que todos os agentes seguem. Esta pagina resume os padroes principais.

Estrutura Modular

Cada funcionalidade e um modulo autocontido:

text
src/modules/[feature]/
├── components/     ← UI
├── composables/    ← Logica (service → adapter → query)
├── services/       ← HTTP puro (sem try/catch)
├── adapters/       ← Parsers (API ↔ App)
├── stores/         ← Apenas estado do cliente (Pinia)
├── types/          ← .types.ts (API) + .contracts.ts (App)
├── views/          ← Paginas
├── __tests__/      ← Testes
└── index.ts        ← Barrel export (API publica)

Regras de Importacao

  • Modules → Shared: ✅ Permitido
  • Modules → Modules: ❌ Nunca (mova o codigo compartilhado para shared/)
  • App → Modules: ✅ Apenas router e registro

Arquitetura de Quatro Camadas

CamadaFazNAO Faz
ServiceChamadas HTTPtry/catch, transformacao, logica
AdapterParsear API ↔ App (snake_case → camelCase)HTTP, efeitos colaterais
ComposableOrquestrar service + adapter + Vue QueryRenderizar UI
Pinia StoreEstado do cliente (UI, filtros, preferencias)Estado do servidor, HTTP
ComponentUI + composicaoLogica de negocio pesada

Exemplo de Fluxo de Dados

Veja o que acontece quando um usuario visita a pagina de Produtos:

Separacao de Gerenciamento de Estado

Pinia = Estado do cliente (UI, filtros, preferencias) Vue Query = Estado do servidor (dados da API, cache, atualizacao em segundo plano)

Convencoes de Nomenclatura

Arquivos

TipoPadraoExemplo
Diretorioskebab-caseuser-settings/
ComponentesPascalCase.vueUserSettingsForm.vue
ViewsPascalCase + View.vueMarketplaceView.vue
Composablesuse + PascalCase.tsuseMarketplaceList.ts
Serviceskebab-case-service.tsmarketplace-service.ts
Adapterskebab-case-adapter.tsmarketplace-adapter.ts
Storeskebab-case-store.tsmarketplace-store.ts
Typeskebab-case.types.tsmarketplace.types.ts
Contractskebab-case.contracts.tsmarketplace.contracts.ts

Codigo

TipoPadraoExemplo
Variaveis / funcoescamelCasegetUserById, isLoading
Types / InterfacesPascalCaseUserProfile, MarketplaceItem
ConstantesUPPER_SNAKE_CASEAPI_BASE_URL, MAX_RETRIES
Composablesuse + PascalCaseuseAuth, useMarketplaceList
Booleanosis/has/can/shouldisLoading, hasPermission
Event handlershandle + acaohandleSubmit, handleDelete

Padroes Principais

  • Pare o Prop Drilling: Use slots + provide/inject + composables diretos
  • Utils vs Helpers: Utils = funcoes puras, Helpers = funcoes com efeitos colaterais
  • Tratamento de Erros: Centralizado nos composables (Vue Query onError)
  • SOLID no Vue: Cada arquivo = 1 responsabilidade

Mergulho Profundo

  • Camadas - Exemplos detalhados de cada camada
  • Componentes - Padroes e composicao de componentes
  • Referencia completa: docs/ARCHITECTURE.md no seu projeto