Architecture Metrics
Loading...
Searching...
No Matches
Ucu.Andis.ArchitectureMetrics.MetricsCalculator Class Reference

Calcula métricas de estabilidad arquitectónica para componentes basadas en sus dependencias. More...

Collaboration diagram for Ucu.Andis.ArchitectureMetrics.MetricsCalculator:

Static Public Member Functions

static IReadOnlyCollection< ComponentBuildAssemblyComponents (Architecture architecture, params string[] assemblyNames)
 Construye una colección de instancias de Component agrupando tipos por ensamblado.
static IReadOnlyCollection< ComponentDependenciesBuildDependencyGraph (IEnumerable< Component > components)
 Construye un grafo de dependencias entre instancias de Component.
static ComponentCouplings CalculateCouplings (IReadOnlyCollection< ComponentDependencies > graph)
 Calcula el acoplamiento aferente -fan-in- y eferente -fan-out- para todos los componentes.
static double CalculateAbstractness (Component component)
 Calcula la abstracción —A— de una instancia de Component.
static IReadOnlyCollection< ComponentMetricsCalculateMetrics (IReadOnlyCollection< Component > components)
 Calcula todas las métricas de estabilidad arquitectónica para los componentes.

Detailed Description

Calcula métricas de estabilidad arquitectónica para componentes basadas en sus dependencias.

Esta calculadora implementa las métricas de arquitectura de Robert C. Martin:

  • Ca: Fan-in o acoplamiento aferente
  • Ce: Fan-out o acoplamiento eferente
  • A: Abstacción; proporción de tipos abstractos
  • I: Inestabilidad; indicador de estabilidad, como $I = \frac{Ce}{Ca + Ce}$
  • D: Distancia; distancia de la secuencia principal, como $D = |A + I - 1|$

Definition at line 17 of file MetricsCalculator.cs.

Member Function Documentation

◆ BuildAssemblyComponents()

IReadOnlyCollection< Component > Ucu.Andis.ArchitectureMetrics.MetricsCalculator.BuildAssemblyComponents ( Architecture architecture,
params string[] assemblyNames )
static

Construye una colección de instancias de Component agrupando tipos por ensamblado.

Parameters
architectureLa arquitectura cargada a analizar.
assemblyNamesLos nombres de los ensamblados a agrupar como componentes.
Returns
Una colección de componentes, cada uno contiene todos los tipos del ensamblado.

Este método es fundamental para organizar la arquitectura en capas lógicas a nivel de despliegue. Los ensamblados son unidades de compilación y despliegue, por lo que son el nivel correcto para medir acoplamiento e inestabilidad arquitectónica.

Definition at line 34 of file MetricsCalculator.cs.

Here is the call graph for this function:

◆ BuildDependencyGraph()

IReadOnlyCollection< ComponentDependencies > Ucu.Andis.ArchitectureMetrics.MetricsCalculator.BuildDependencyGraph ( IEnumerable< Component > components)
static

Construye un grafo de dependencias entre instancias de Component.

Parameters
componentsLos componentes para los cuales construir el grafo.
Returns
Una colección de ComponentDependencies donde cada elemento contiene el nombre del componente y la colección de componentes de los que depende.

El grafo resultante se utiliza para calcular acoplamiento aferente -fan-in- y eferente -fan-out-. Solo se incluyen dependencias externas al componente -se ignoran dependencias internas-. Cuentan como dependencias:

  • Referencias a tipos en variables o propiedades de instancia o de clase, parámetros de métodos y sus resultados.
  • Heredar de tipos
  • Implementar interfaces

Definition at line 69 of file MetricsCalculator.cs.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculateAbstractness()

double Ucu.Andis.ArchitectureMetrics.MetricsCalculator.CalculateAbstractness ( Component component)
static

Calcula la abstracción —A— de una instancia de Component.

Parameters
componentEl componente para el cual calcular la abstracción.
Returns
Un valor entre 0 y 1 representando la proporción de tipos abstractos.

A -Abstracción- = (número de interfaces + clases abstractas + records abstractos + tipos genéricos extensibles) / total de tipos.

Se consideran tipos abstractos o extensibles:

  • Interfaces: contrato sin implementación, abstractas por definición.
  • Clases abstractas: contrato parcial que requiere implementación.
  • Records abstractos: registros que requieren implementación en subclases.
  • Tipos genéricos -con parámetros de tipo- son extensibles vía parametrización.

Ejemplos:

  • A = 0: Componente totalmente concreto -solo clases y records concretos no genéricos-.
  • A = 1: Componente totalmente abstracto -solo interfaces, clases y records abstractos-.
  • A = 0.5: Componente equilibrado con mezcla de tipos abstractos y concretos.

La abstracción es un indicador de flexibilidad: cuanto más abstracto, más fácil de extender. Los tipos genéricos aportan extensibilidad mediante parametrización de tipos.

Definition at line 181 of file MetricsCalculator.cs.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculateCouplings()

ComponentCouplings Ucu.Andis.ArchitectureMetrics.MetricsCalculator.CalculateCouplings ( IReadOnlyCollection< ComponentDependencies > graph)
static

Calcula el acoplamiento aferente -fan-in- y eferente -fan-out- para todos los componentes.

Parameters
graphEl grafo de dependencias entre componentes.
Returns
Un ComponentCouplings con dos diccionarios: FanIn -acoplamiento aferente- y FanOut -acoplamiento eferente-.

FanIn: Cuántos otros componentes dependen de este. FanOut: De cuántos otros componentes este depende.

Estos valores son necesarios para calcular la inestabilidad, como $I = \frac{Ce}{Ca + Ce}$.

Definition at line 124 of file MetricsCalculator.cs.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CalculateMetrics()

IReadOnlyCollection< ComponentMetrics > Ucu.Andis.ArchitectureMetrics.MetricsCalculator.CalculateMetrics ( IReadOnlyCollection< Component > components)
static

Calcula todas las métricas de estabilidad arquitectónica para los componentes.

Parameters
componentsLos componentes para los cuales calcular las métricas.
Returns
Una colección de métricas para cada componente, incluyendo FanIn, FanOut, Abstractness, Instability y Distance.

Este método orquesta el cálculo de todas las métricas fundamentales:

  • FanIn -acoplamiento aferente-
  • FanOut -acoplamiento eferente-
  • A -abstracción-
  • I -inestabilidad- = Fan-out / (Fan-in + Fan-out)
  • D -distancia de secuencia principal- = |A + I - 1|

Estas métricas son indicadores clave de la calidad arquitectónica según Robert C. Martin.

Definition at line 245 of file MetricsCalculator.cs.

Here is the call graph for this function:

The documentation for this class was generated from the following file: