Negli ultimi anni lo sviluppo software si è spostato sempre più verso architetture distribuite, basate su microservizi e pensate per il cloud. Questo modello ha portato vantaggi in termini di scalabilità e flessibilità, ma ha anche introdotto nuove complessità: gestire molteplici progetti, orchestrare risorse esterne come database, code di messaggi e cache, monitorare il funzionamento di ogni componente e assicurarsi che l’applicazione funzioni allo stesso modo in locale e in produzione.
Per affrontare queste sfide, Microsoft ha introdotto .NET Aspire, un nuovo modello applicativo pensato per semplificare la creazione e la gestione di applicazioni distribuite in ambiente .NET. Aspire non è un nuovo framework che sostituisce ASP.NET Core, Entity Framework o le librerie che già conosciamo, ma un livello superiore di orchestrazione che integra e coordina questi strumenti. In altre parole, Aspire ti permette di concentrarti sulla logica della tua applicazione, lasciando a lui il compito di gestire l’infrastruttura e l’ecosistema che le ruota attorno.
Possiamo definire .NET Aspire come un application model per .NET, ovvero un set di strumenti e convenzioni che consentono di definire un’applicazione come una combinazione di progetti e risorse distribuite. L’idea è semplice: invece di gestire manualmente ogni parte dell’ecosistema (API, frontend, database, servizi esterni), puoi dichiarare nel tuo progetto principale – chiamato AppHost – tutto ciò di cui hai bisogno.
L’AppHost diventa così il cuore della tua applicazione Aspire: un punto centrale che conosce i tuoi progetti, le risorse collegate e le relative dipendenze. Grazie a questa definizione, Aspire può occuparsi di:
I vantaggi principali di Aspire si possono riassumere in quattro punti:
Vediamo un piccolo esempio per capire come funziona. Immaginiamo di avere un progetto API che deve usare un database SQL Server. Con Aspire, l’AppHost potrebbe essere così:
var builder = DistributedApplication.CreateBuilder(args);
// Aggiungiamo SQL Server come risorsa
var sql = builder.AddSqlServer("sqlserver")
.WithDataVolume()
.AddDatabase("appdb");
// Aggiungiamo la nostra API e la colleghiamo al database
builder.AddProject
Nel progetto MyApi, la connection string al database sarà disponibile automaticamente tramite la configurazione:
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("appdb");
builder.Services.AddDbContext(options =>
options.UseSqlServer(connectionString));
var app = builder.Build();
app.MapGet("/todos", async (MyDbContext db) => await db.Todos.ToListAsync());
app.Run();
In questo esempio, Aspire si occupa di una serie di attività che normalmente dovresti configurare a mano:
Grazie a questo approccio, puoi concentrarti solo sul codice applicativo, senza preoccuparti di come orchestrare e connettere i servizi di supporto.
Aspire è particolarmente utile nei seguenti scenari:
Per contro, se stai sviluppando una piccola applicazione monolitica con un solo database, forse Aspire non porta un vantaggio immediato: il suo vero valore si vede quando la complessità dell’ecosistema cresce.
.NET Aspire rappresenta un passo avanti importante per lo sviluppo di applicazioni distribuite in .NET. Non sostituisce i framework e le librerie che già conosciamo, ma fornisce un livello superiore di orchestrazione che semplifica la vita degli sviluppatori e riduce la complessità dell’infrastruttura.
Grazie ad Aspire, possiamo concentrarci sul codice che genera valore per gli utenti, lasciando che sia lui a gestire avvio, configurazione e monitoraggio delle risorse che supportano la nostra applicazione.
Nel prossimo articolo vedremo come iniziare a usare Aspire nella pratica, con un tutorial passo passo per creare il nostro primo progetto.
Happy coding, Ivano.
Spoiler alert : Articolo scrito con il supporto dell'intelligenza artificiale