Passa al contenuto principale

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
  • 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

RegolaDescrizione
no-circular-depsPreviene dipendenze circolari
max-complexityLimita la complessità ciclomatica
max-file-lengthLimita la dimensione del file
naming-conventionImpone 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

  1. Esegui analisi regolarmente - Rileva i problemi presto
  2. Definisci regole di architettura - Previeni violazioni
  3. Rivedi la complessità - Refactoring degli hotspot
  4. Monitora i trend - Traccia le metriche nel tempo