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
Navegação
- 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
| Regra | Descrição |
|---|---|
no-circular-deps | Previne dependências circulares |
max-complexity | Limita complexidade ciclomática |
max-file-length | Limita tamanho do arquivo |
naming-convention | Impõ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
- Executar análise regularmente - Detectar problemas cedo
- Definir regras de arquitetura - Prevenir violações
- Revisar complexidade - Refatorar pontos críticos
- Monitorar tendências - Acompanhar métricas ao longo do tempo