Skip to content

Visao Geral da Arquitetura

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

Distribuído sob a licença MIT.