Questo post fa parte di una serie dedicata ad Aurelia e ASP.NET Core.
Per chi, come me, ha da sempre come pane quotidiano la realizzazione di applicazioni web, in particolare applicazioni con una forte interazione lato client, questi mesi estivi sono stati forieri di entusiasmanti novità.
Nel giro di poche settimane abbiamo infatti assistito al rilascio della RTM di ASP.NET Core (a fine giugno) e di Aurelia (a fine luglio). Mentre sfido chiunque a non aver mai sentito parlare della nuova piattaforma Microsoft per lo sviluppo di applicazione web, molto probabilmente il nuovo framework per realizzare Single Page Application potrebbe essere argomento sconosciuto ai più.
Tanta è l’eccitazione che ho deciso di imbarcarmi in un “viaggio” tra le caratteristiche di questa strana coppia per capire come sfruttarne i rispettivi punti di forza nello sviluppo di un’applicazione web. Premetto subito che non ho alcuna pretesa didattica, non so quale sarà in porto finale di approdo (o lo scoglio di naufragio), non voglio rivelarvi verità clamorose, non so neanche quale rotta seguire e quanto a lungo navigare. In ogni caso, se volete saltare sulla barca, c’è posto.
Prima di levare l’ancora, cerchiamo di capire meglio di cosa (secondo me) stiamo parlando. Come detto, ritengo ASP.NET Core patrimonio di tutti quindi ne farò solo un breve accenno, riservando qualche parola in più ad Aurelia e alla sua storia.
Cos’è ASP.NET Core?
ASP.NET Core è un nuovo framework per realizzare applicazioni web moderne. Rispetto al già noto e strautilizzato ASP.NET, si caratterizza per essere open‑source (sì avete letto bene), cross‑platform (sì avete riletto bene) e fortemente orientato al cloud (e qui non c’è alcuna sorpresa).
ASP.NET Core può girare sia sul .NET Framework “completo” sia sul nuovo .NET Core (da cui in tal caso eredita le caratteristiche di portabilità di cui sopra).
Una particolarità rispetto al passato consiste nel suo design modulare notevolmente granulare. A differenza di come eravamo abituati in ASP.NET “classico” (fa un po’ specie utilizzare questo termine che anni fa abbiamo usato per distinguere il “vecchio” ASP 3 dall’allora innovativo ASP.NET 1.0), con ASP.NET Core possiamo scegliere con estrema flessibilità quali funzionalità includere e quali escludere dalla nostra soluzione, rendendo ovviamente il risultato finale assai più snello e performante.
Se fino a ieri eravamo abituati a partire dal nutrito pacchetto di funzionalità messe a disposizione monoliticamente da ASP.NET, aggiungendoci sopra quelle fornite da librerie di terze parti tramite pacchetti NuGet, oggi le stesse parti di cui il framowork è composto sono distribuite tramite NuGet e possono essere assemblate a piacimento in una specie di federazione di pacchetti.
In tutto ciò, non guastano la nuova modalità di hosting, slegata da IIS, e alcune nuove feature build‑in, come ad esempio un Inversion of Control container per gestire la Dependency Injection.
Cos’è Aurelia?
Aurelia è un framework JavaScript per la realizzazione di UI di nuova generazione.
È l’ultima creazione di Rob Eisenberg, che ci ha già regalato framework come Caliburn.Micro (per lo sviluppo WPF/XAML) e Durandal (per lo sviluppo web).
Un po’ di storia può aiutarci a capire meglio in che contesto ci muoveremo.
Un paio di anni fa, dopo aver ideato Durandal vNext ed aver cercato senza successo di raccogliere fondi su KickStarter per portare avanti il progetto, Rob aveva deciso di abbracciare il lato oscuro, unendosi al team di Angular per contribuire alla realizzazione di Angular 2.
La sua idea era portare la sua competenza ed esperienza nei framework MVVM per realizzare in Angular 2 le idee che aveva ipotizzato per Durandal vNext. Dopo circa dieci mesi di collaborazione le strade di Rob e del team si sono però divise per una differente visione strategica e Rob ha ripreso a lavorare alle idee di Durandal vNext che si sono quindi concretizzate in un nuovo framework: Aurelia.
Come per ogni framework, in rete si trovano decine di definizioni diverse di Aurelia, ognuna con sfumature leggermente diverse, nessuna esatta, nessuna errata. Per me nella sua essenza Aurelia è fondamentalmente un insieme di librerie JavaScript moderne e modulari per realizzare interfacce utente.
Moderne perché sono state scritte dalle fondamenta interamente in ECMAScript 2016 (altrimenti noto come ES7) e supportano quindi nativamente moduli, classi, decoratori e via dicendo, consentendo ovviamente di utilizzare le medesime caratteristiche per scrivere la parte di codice applicativo di nostra competenza.
Modulare perché l’approccio architetturale su cui è basato non è quello che ha caratterizzato tanti giganti monolitici e poco flessibili che abbiamo usato in passato. Aurelia è piuttosto progettato come una rete di librerie che collaborano tra loro per formare un framework potente e solido per sviluppare Single Page Application (SPA). In tal senso i due protagonisti del nostro viaggi si assomigliano parecchio.
Tenendo fede ad un consolidato stile di Rob, anche Aurelia si caratterizza per una notevole facilità d’uso grazie all’approccio convention‑over‑configuration: il framework è dotato di una serie di convenzioni semplici ed immediate che consentono di seguire pattern di programmazione solidi e di ridurre la quantità di codice da scrivere e manutenere. Il che significa potersi focalizzare maggiormente sulla propria applicazione riducendo il tempo speso ad interagire con le API del framework senza perdere però la possibilità di configurare comportamenti diversi ove necessario.
La sua modularità gli consente inoltre di essere facilmente personalizzato ed integrato. Praticamente ogni aspetto di Aurelia è estendibile, il che garantisce di non trovarsi mai di fronte a "scatole chiuse" o di dover "hackerare" il framework per farlo funzionare nel modo desiderato. Ma consente anche di integrare con immediatezza qualsiasi libreria o framework di terze parti, come ad esempio jQuery, React, Polymer o Bootstrap.
Dulcis in fundo, Aurelia è stato progettato attorno alla nuova generazione di JavaScript e ai Web Components, con l'obiettivo di evitare astrazioni superflue che nascondano la tecnologia sottostante, è si propone quindi come il framework che maggiormente rispetta gli attuali standard di programmazione, promettendo di farci scrivere sempre codice JavaScript, senza invasivi costrutti da rispettare.
Direi che siamo pronti per imbarcarci, alla prossima.
Happy coding!