Pular para o conteúdo principal

Análise de Arquitetura

Aprenda como usar o ArchiCore para entender e melhorar a arquitetura do seu código.

Visão Geral

ArchiCore analisa a estrutura do seu código para identificar:

  • Dependências de módulos
  • Dependências circulares
  • Violações de camadas
  • Pontos críticos de complexidade
  • Padrões de arquitetura

Visualização

Grafo de Dependências

O painel principal mostra um grafo de dependências interativo:

  • Nós representam arquivos ou módulos
  • Arestas representam imports/dependências
  • Cores indicam tipos de módulos ou estado de saúde
  • Tamanho reflete a complexidade do arquivo
  • Zoom com a roda do mouse
  • Pan arrastando
  • Clique em nós para ver detalhes
  • Duplo clique para focar em um módulo

Regras de Arquitetura

Defina regras para impor limites arquiteturais.

Criando Regras

// .archicore/rules.json
{
"rules": [
{
"id": "layer-separation",
"name": "Separação de Camadas",
"type": "import",
"severity": "error",
"config": {
"forbidden": [
{
"from": "controllers/*",
"to": "repositories/*",
"message": "Controllers não devem acessar repositories diretamente"
}
]
}
}
]
}

Regras Integradas

RegraDescrição
no-circular-depsPrevine dependências circulares
max-complexityLimita complexidade ciclomática
max-file-lengthLimita tamanho do arquivo
naming-conventionImpõe padrões de nomenclatura

Validando Regras

> /rules validate
Validando regras de arquitetura...

✓ no-circular-deps: APROVADO
✗ layer-separation: FALHOU (2 violações)
- src/controllers/user.ts:5 importa src/repositories/user.ts
- src/controllers/product.ts:3 importa src/repositories/product.ts

Contextos Delimitados

Defina limites lógicos na sua aplicação:

// .archicore/architecture.json
{
"boundedContexts": [
{
"name": "Autenticação",
"description": "Autenticação de usuários e sessões",
"paths": ["src/auth/*", "src/middleware/auth*"]
},
{
"name": "Produtos",
"description": "Gestão do catálogo de produtos",
"paths": ["src/products/*", "src/inventory/*"]
}
]
}

Métricas

Métricas de Complexidade

  • Complexidade Ciclomática - Número de caminhos independentes
  • Complexidade Cognitiva - Quão difícil é entender o código
  • Índice de Manutenibilidade - Pontuação geral de manutenibilidade

Identificando Pontos Críticos

> /metrics --sort complexity
Pontos Críticos de Complexidade de Código:

1. src/services/order.ts:processOrder()
Complexidade: 25 | Linhas: 180 | Manutenibilidade: 45

2. src/utils/parser.ts:parseInput()
Complexidade: 18 | Linhas: 120 | Manutenibilidade: 52

3. src/api/handlers.ts:handleRequest()
Complexidade: 15 | Linhas: 95 | Manutenibilidade: 58

Sugestões de Refatoração

ArchiCore pode sugerir oportunidades de refatoração:

> /refactoring src/services/order.ts
Sugestões de Refatoração para src/services/order.ts:

1. Extrair Método
processOrder() é muito complexo (25)
Sugestão: Extrair lógica de validação para validateOrder()

2. Dividir Arquivo
Arquivo tem 180 linhas com múltiplas responsabilidades
Sugestão: Dividir em OrderProcessor e OrderValidator

3. Reduzir Dependências
Arquivo importa 12 módulos
Sugestão: Considerar padrão facade para reduzir acoplamento

Melhores Práticas

  1. Executar análise regularmente - Detectar problemas cedo
  2. Definir regras de arquitetura - Prevenir violações
  3. Revisar complexidade - Refatorar pontos críticos
  4. Monitorar tendências - Acompanhar métricas ao longo do tempo