Análisis de Arquitectura
Aprende a usar ArchiCore para entender y mejorar la arquitectura de tu código.
Descripción General
ArchiCore analiza la estructura de tu código para identificar:
- Dependencias de módulos
- Dependencias circulares
- Violaciones de capas
- Puntos críticos de complejidad
- Patrones de arquitectura
Visualización
Grafo de Dependencias
El panel principal muestra un grafo de dependencias interactivo:
- Nodos representan archivos o módulos
- Aristas representan imports/dependencias
- Colores indican tipos de módulos o estado de salud
- Tamaño refleja la complejidad del archivo
Navegación
- Zoom con la rueda del ratón
- Desplazar arrastrando
- Clic en nodos para ver detalles
- Doble clic para enfocar en un módulo
Reglas de Arquitectura
Define reglas para imponer límites arquitectónicos.
Creación de Reglas
// .archicore/rules.json
{
"rules": [
{
"id": "layer-separation",
"name": "Separación de Capas",
"type": "import",
"severity": "error",
"config": {
"forbidden": [
{
"from": "controllers/*",
"to": "repositories/*",
"message": "Los controladores no deben acceder a repositorios directamente"
}
]
}
}
]
}
Reglas Integradas
| Regla | Descripción |
|---|---|
no-circular-deps | Previene dependencias circulares |
max-complexity | Limita la complejidad ciclomática |
max-file-length | Limita el tamaño del archivo |
naming-convention | Impone estándares de nomenclatura |
Validación de Reglas
> /rules validate
Validando reglas de arquitectura...
✓ no-circular-deps: APROBADO
✗ layer-separation: FALLIDO (2 violaciones)
- src/controllers/user.ts:5 importa src/repositories/user.ts
- src/controllers/product.ts:3 importa src/repositories/product.ts
Contextos Delimitados
Define límites lógicos en tu aplicación:
// .archicore/architecture.json
{
"boundedContexts": [
{
"name": "Autenticación",
"description": "Autenticación de usuarios y sesiones",
"paths": ["src/auth/*", "src/middleware/auth*"]
},
{
"name": "Productos",
"description": "Gestión del catálogo de productos",
"paths": ["src/products/*", "src/inventory/*"]
}
]
}
Métricas
Métricas de Complejidad
- Complejidad Ciclomática - Número de caminos independientes
- Complejidad Cognitiva - Qué tan difícil es entender el código
- Índice de Mantenibilidad - Puntuación general de mantenibilidad
Identificación de Puntos Críticos
> /metrics --sort complexity
Puntos Críticos de Complejidad de Código:
1. src/services/order.ts:processOrder()
Complejidad: 25 | Líneas: 180 | Mantenibilidad: 45
2. src/utils/parser.ts:parseInput()
Complejidad: 18 | Líneas: 120 | Mantenibilidad: 52
3. src/api/handlers.ts:handleRequest()
Complejidad: 15 | Líneas: 95 | Mantenibilidad: 58
Sugerencias de Refactorización
ArchiCore puede sugerir oportunidades de refactorización:
> /refactoring src/services/order.ts
Sugerencias de Refactorización para src/services/order.ts:
1. Extraer Método
processOrder() es muy complejo (25)
Sugerencia: Extraer lógica de validación a validateOrder()
2. Dividir Archivo
El archivo tiene 180 líneas con múltiples responsabilidades
Sugerencia: Dividir en OrderProcessor y OrderValidator
3. Reducir Dependencias
El archivo importa 12 módulos
Sugerencia: Considerar patrón facade para reducir acoplamiento
Mejores Prácticas
- Ejecutar análisis regularmente - Detectar problemas temprano
- Definir reglas de arquitectura - Prevenir violaciones
- Revisar complejidad - Refactorizar puntos críticos
- Monitorear tendencias - Seguir métricas en el tiempo