Analisi dell'Architettura
Impara come usare ArchiCore per comprendere e migliorare l'architettura del tuo codice.
Panoramica
ArchiCore analizza la struttura del tuo codice per identificare:
- Dipendenze dei moduli
- Dipendenze circolari
- Violazioni dei layer
- Hotspot di complessità
- Pattern architetturali
Visualizzazione
Grafo delle Dipendenze
La dashboard principale mostra un grafo delle dipendenze interattivo:
- Nodi rappresentano file o moduli
- Archi rappresentano import/dipendenze
- Colori indicano tipi di moduli o stato di salute
- Dimensione riflette la complessità del file
Navigazione
- Zoom con la rotella del mouse
- Pan trascinando
- Clic sui nodi per vedere i dettagli
- Doppio clic per focalizzarsi su un modulo
Regole di Architettura
Definisci regole per imporre confini architetturali.
Creare Regole
// .archicore/rules.json
{
"rules": [
{
"id": "layer-separation",
"name": "Separazione dei Layer",
"type": "import",
"severity": "error",
"config": {
"forbidden": [
{
"from": "controllers/*",
"to": "repositories/*",
"message": "I controller non devono accedere direttamente ai repository"
}
]
}
}
]
}
Regole Integrate
| Regola | Descrizione |
|---|---|
no-circular-deps | Previene dipendenze circolari |
max-complexity | Limita la complessità ciclomatica |
max-file-length | Limita la dimensione del file |
naming-convention | Impone standard di naming |
Validare le Regole
> /rules validate
Validazione regole di architettura...
✓ no-circular-deps: PASSATO
✗ layer-separation: FALLITO (2 violazioni)
- src/controllers/user.ts:5 importa src/repositories/user.ts
- src/controllers/product.ts:3 importa src/repositories/product.ts
Bounded Context
Definisci confini logici nella tua applicazione:
// .archicore/architecture.json
{
"boundedContexts": [
{
"name": "Autenticazione",
"description": "Autenticazione utente e sessioni",
"paths": ["src/auth/*", "src/middleware/auth*"]
},
{
"name": "Prodotti",
"description": "Gestione catalogo prodotti",
"paths": ["src/products/*", "src/inventory/*"]
}
]
}
Metriche
Metriche di Complessità
- Complessità Ciclomatica - Numero di percorsi indipendenti
- Complessità Cognitiva - Quanto è difficile capire il codice
- Indice di Manutenibilità - Punteggio complessivo di manutenibilità
Identificare gli Hotspot
> /metrics --sort complexity
Hotspot di Complessità del Codice:
1. src/services/order.ts:processOrder()
Complessità: 25 | Righe: 180 | Manutenibilità: 45
2. src/utils/parser.ts:parseInput()
Complessità: 18 | Righe: 120 | Manutenibilità: 52
3. src/api/handlers.ts:handleRequest()
Complessità: 15 | Righe: 95 | Manutenibilità: 58
Suggerimenti di Refactoring
ArchiCore può suggerire opportunità di refactoring:
> /refactoring src/services/order.ts
Suggerimenti di Refactoring per src/services/order.ts:
1. Estrai Metodo
processOrder() è troppo complesso (25)
Suggerimento: Estrarre la logica di validazione in validateOrder()
2. Dividi File
Il file ha 180 righe con responsabilità multiple
Suggerimento: Dividere in OrderProcessor e OrderValidator
3. Riduci Dipendenze
Il file importa 12 moduli
Suggerimento: Considerare il pattern facade per ridurre l'accoppiamento
Best Practice
- Esegui analisi regolarmente - Rileva i problemi presto
- Definisci regole di architettura - Previeni violazioni
- Rivedi la complessità - Refactoring degli hotspot
- Monitora i trend - Traccia le metriche nel tempo