Ucu.Andis.ArchitectureMetrics
1.0.25
dotnet add package Ucu.Andis.ArchitectureMetrics --version 1.0.25
NuGet\Install-Package Ucu.Andis.ArchitectureMetrics -Version 1.0.25
<PackageReference Include="Ucu.Andis.ArchitectureMetrics" Version="1.0.25" />
<PackageVersion Include="Ucu.Andis.ArchitectureMetrics" Version="1.0.25" />
<PackageReference Include="Ucu.Andis.ArchitectureMetrics" />
paket add Ucu.Andis.ArchitectureMetrics --version 1.0.25
#r "nuget: Ucu.Andis.ArchitectureMetrics, 1.0.25"
#:package Ucu.Andis.ArchitectureMetrics@1.0.25
#addin nuget:?package=Ucu.Andis.ArchitectureMetrics&version=1.0.25
#tool nuget:?package=Ucu.Andis.ArchitectureMetrics&version=1.0.25
<img alt="UCU" src="./assets/logo_ucu.svg" width="150"/>
Universidad Católica del Uruguay
Facultad de Ingeniería y Tecnologías
Análisis y diseño de aplicaciones I y II
ArchitectureMetrics: Librería para calcular métricas de arquitectura
La 📖 documentación de esta librería está publicada aquí.
Esta librería proporciona herramientas para analizar y medir la estabilidad y calidad de una arquitectura de software, utilizando las métricas y principios definidos por Robert C. Martin, usando ArchUnit.
Para cada componente -donde en este contexto componente es un ensamblado- calcula las siguientes métricas:
Fan-in o acoplamiento aferente: cuántos otros componentes dependen del componente dado.
Fan-out o acoplamiento eferente: de cuántos otros componentes depende un componente dado.
Abstractness: Proporción de tipos abstractos o extensibles -interfaces, clases abstractas, registros abstractos, tipos genéricos- respecto del total de tipos
Instability: Medida de qué tan susceptible es el componente al cambio $I = \frac{Ce}{Ca + Ce}$
Distance: Distancia de la secuencia principal $D = |A + I - 1|$
Para el cálculo de las métricas de abstracción se consideran tipos abstractos:
- Interfaces
interface - Clases abstractas
abstract class - Records abstractos
abstract record - Tipos genéricos
class<T>
Estructura del proyecto
ANDIS_ArchitectureMetrics/
├── src/
│ └── Ucu.Andis.ArchitectureMetrics/ # Librería principal
│ ├── Models/ # Modelos de datos
│ │ ├── Component.cs # Definición de componente
│ │ ├── ComponentMetrics.cs # Contenedor de métricas
│ │ ├── ComponentDependencies.cs # Grafo de dependencias
│ │ └── ComponentCouplings.cs # Métricas de acoplamiento
│ └── Calculators/ # Motores de cálculo
│ └── MetricsCalculator.cs # Calculador principal
│
├── tests/
│ └── Ucu.Andis.ArchitectureMetrics.Tests/ # Casos de prueba
│
├── docs/ # Documentación
├── README.md # Este archivo
└── ANDIS_ArchitectureMetrics.sln # Archivo de solución
Uso
using Ucu.Andis.ArchitectureMetrics;
using ArchUnitNET.Loader;
// Cargar assemblies
var architecture = new ArchLoader()
.LoadAssemblies(
typeof(Domain.Entity).Assembly,
typeof(Application.Command).Assembly,
typeof(Infrastructure.Repository).Assembly,
typeof(API.Controller).Assembly
)
.Build();
// Construir componentes desde los assemblies
var components = MetricsCalculator.BuildAssemblyComponents(
architecture,
"MyApp.Domain",
"MyApp.Application",
"MyApp.Infrastructure",
"MyApp.API"
);
// Calcular métricas
var metrics = MetricsCalculator.CalculateMetrics(components);
// Usar métricas para análisis
foreach (var metric in metrics)
{
Console.WriteLine($"{metric.Name}:");
Console.WriteLine($" Fan-In: {metric.FanIn}");
Console.WriteLine($" Fan-Out: {metric.FanOut}");
Console.WriteLine($" Abstractness: {metric.Abstractness:F4}");
Console.WriteLine($" Instability: {metric.Instability:F4}");
Console.WriteLine($" Distance: {metric.Distance:F4}");
}
Requisitos
- .NET 8.0 o posterior
- TngTech.ArchUnitNET 0.13.3 o compatible
Instalación desde NuGet
dotnet add package Ucu.Andis.ArchitectureMetrics
O en tu archivo .csproj:
<ItemGroup>
<PackageReference Include="Ucu.Andis.ArchitectureMetrics" Version="1.0.0"/>
</ItemGroup>
Compilación
dotnet build
Ejecutar tests
dotnet test
Publicación
Los números de versión tienen la forma x.y.z donde x.y lo indica el
desarrollador y z se incrementa automáticamente. La publicación del paquete es
a través de una GitHub Action.
Ejecución automática
Esta acción se ejecuta automáticamente de la siguiente forma:
git tag v0.0
git push origin v0.0
donde 0.0 es el número de versión deseado.
En caso de que el tag ya exista, eliminarlo primero con:
git tag -d v0.0
git push origin --delete v0.0
Ejecución manual
La acción se puede ejecutar manualmente. En el momento de ejecutarla va a pedir
el numero de versión 0.0.
Documentación
La documentación de la API se genera usando Doxygen. Consulte la carpeta docs/
para documentación detallada.
cd docs
doxygen
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- TngTech.ArchUnitNET (>= 0.13.3)
-
net8.0
- TngTech.ArchUnitNET (>= 0.13.3)
-
net9.0
- TngTech.ArchUnitNET (>= 0.13.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|