Condividi tramite


Caratteristiche delle applicazioni Web moderne

Suggerimento

Questo contenuto è un estratto dell'eBook Progettare applicazioni Web moderne con ASP.NET Core e Azure, disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"… con la progettazione adeguata, i costi delle funzionalità risultano competitivi. Questo approccio è complesso, ma continua a dare risultati positivi".
- Dennis Ritchie

Le applicazioni Web moderne devono soddisfare esigenze e aspettative degli utenti sempre più importanti. Oggi le app Web devono essere disponibili 24 ore al giorno, ogni giorno e in qualsiasi parte del mondo e devono poter essere usate su qualsiasi dispositivo o su uno schermo di qualsiasi dimensione. Le applicazioni Web devono essere sicure, flessibili e scalabili, per soddisfare i picchi di richiesta. Scenari sempre più complessi devono essere gestiti con esperienze utente complete, app compilate nel client con JavaScript e in grado di comunicare adeguatamente tramite le API Web.

ASP.NET Core è ottimizzato per le applicazioni Web moderne e gli scenari di hosting nel cloud. Grazie al design modulare della soluzione, le applicazioni dipendono solo dalle funzionalità che effettivamente usano, migliorando la sicurezza e le prestazioni e riducendo i requisiti per la risorsa host.

Applicazione di riferimento: eShopOnWeb

Questa guida include un'applicazione di riferimento, eShopOnWeb, che dimostra alcune idee e suggerimenti. L'applicazione è un semplice negozio online, nel quale gli utenti possono consultare un catalogo di T-shirt, tazze da caffè e altri articoli di marketing. L'applicazione di riferimento è volutamente semplice, perché sia facile comprenderne il funzionamento.

eShopOnWeb

Figura 2-1. eShopOnWeb

Applicazione di riferimento

Ospitato nel cloud e scalabile

Il framework ASP.NET Core è ottimizzato per il cloud (sia pubblico che privato) perché fa un uso ridotto della memoria e garantisce velocità effettive elevate. Il footprint ridotto delle applicazioni ASP.NET Core significa che è possibile ospitarne di più nello stesso componente hardware e ridurre i costi quando si usano servizi di hosting su cloud con il modello di pagamento a consumo. La velocità effettiva superiore consente di raggiungere più clienti da un'applicazione residente in un determinato componente hardware, riducendo ulteriormente gli investimenti in server e infrastrutture di hosting.

Multipiattaforma

ASP.NET Core è multipiattaforma e può essere eseguito in Linux, macOS e Windows. Questa capacità offre molte nuove opzioni per lo sviluppo e la distribuzione di app compilate con ASP.NET Core. I contenitori Docker sia Linux che Windows possono ospitare applicazioni ASP.NET Core e avvalersi così dei vantaggi offerti da contenitori e microservizi.

Modulare e loosely coupled

I pacchetti NuGet sono perfettamente compatibili in .NET Core e la struttura con molte librerie delle app ASP.NET Core dipende da NuGet. La granularità delle funzionalità garantisce che le app eseguano e distribuiscano solo le funzionalità necessarie, riducendo la superficie di attacco per le vulnerabilità di sicurezza.

ASP.NET Core offre anche il supporto completo per l'inserimento delle dipendenze, sia internamente che a livello di applicazione. Le interfacce possono avere più implementazioni, intercambiabili in base alle esigenze. L'inserimento delle dipendenze consente l'accoppiamento debole delle app a tali interfacce, anziché a implementazioni specifiche, semplificandone l'estensione, la gestione e il test.

Test automatizzati

Le applicazioni ASP.NET Core supportano gli unit test, l'accoppiamento libero e l'inserimento delle dipendenze, pertanto risulta facile sostituire le sezioni dell'infrastruttura che causano problemi con implementazioni fittizie per l'esecuzione di test. ASP.NET Core include anche un TestServer che può essere usato per l'hosting delle app in memoria. I test funzionali possono quindi inoltrare richieste a questo server in memoria, usando l'intero stack dell'applicazione (middleware, routing, binding dei modelli, filtri e così via) e ricevendo una risposta, il tutto in una frazione del tempo che sarebbe necessario per impostare l'hosting dell'app in un server reale e inoltrare richieste attraverso il layer di rete. Questi test sono facili da scrivere e particolarmente utili per le API, che sono sempre più importanti nelle applicazioni Web moderne.

Supporto di comportamenti tradizionali e delle applicazioni a pagina singola

Le applicazioni Web tradizionali includono comportamenti lato client limitati, ma si basano sul server per tutte le attività di navigazione, query e aggiornamento. Ogni nuova operazione eseguita dall'utente diventa una nuova richiesta Web e richiede un nuovo caricamento completo della pagina nel browser dell'utente finale. I framework Model-View-Controller (MVC , Modello-Visualizzazione-Controller) classici seguono in genere questo approccio, in cui ogni nuova richiesta corrisponde a un'azione del controller diversa che a sua volta interagisce con un modello e restituisce una visualizzazione. Alcune operazioni singole su una determinata pagina possono essere migliorate con la funzionalità AJAX (Asynchronous JavaScript and XML), ma l'architettura complessiva dell'app usa molte visualizzazioni MVC e molti endpoint URL diversi. ASP.NET Core MVC supporta anche Razor Pages, un modo più semplice per organizzare le pagine in stile MVC.

Le applicazioni a pagina singola, al contrario, richiedono un numero molto limitato di caricamenti pagina generati dinamicamente sul lato server. Molte applicazioni a pagina singola vengono inizializzate all'interno di un file HTML statico, che carica le librerie JavaScript necessarie per avviare ed eseguire l'app. Queste app usano in modo intensivo le API Web per ottenere i dati necessari e possono offrire esperienze utente molto più complete. BlazorWebAssembly fornisce un mezzo per la compilazione di applicazioni a pagina singola usando il codice .NET, che viene quindi eseguito nel browser del client.

Molte applicazioni Web presentano una combinazione di comportamenti dell'applicazione Web tradizionale (in genere per il contenuto) e applicazioni a pagina singola (per l'interattività). ASP.NET Core supporta sia MVC (Viste e Pagine) sia le API Web nella stessa applicazione, usando lo stesso set di strumenti e librerie del framework sottostanti.

Sviluppo e distribuzione facili

È possibile creare applicazioni ASP.NET Core con editor di testo e interfacce della riga di comando semplici oppure con ambienti di sviluppo completi come Visual Studio. In genere le applicazioni monolitiche vengono distribuite a un singolo endpoint. Le distribuzioni possono essere facilmente automatizzate e incluse in una pipeline di integrazione continua (CI, Continuous Integration) e recapito continuo (CD, Continuous Delivery). Microsoft Azure include supporto integrato sia per gli strumenti CI/CD tradizionali sia per i repository Git integrati ed è in grado di distribuire automaticamente gli aggiornamenti completati a un ramo Git o un tag specificato. Azure DevOps offre una pipeline di distribuzione e compilazione CI/CD completa e GitHub Actions offre un'altra opzione per i progetti ospitati in questa posizione.

ASP.NET tradizionale e Web Form

Oltre ad ASP.NET Core, anche ASP.NET 4.x continua a rappresentare una piattaforma solida e affidabile per la compilazione di applicazioni Web. Oltre ai modelli di sviluppo MVC e API Web, ASP.NET supporta Web Forms, che è ideale per lo sviluppo di applicazioni complesse basate sulla pagina e ha un ecosistema di componenti di terze parti completo. Microsoft Azure offre da tempo il supporto completo delle applicazioni ASP.NET 4.x e molti sviluppatori conoscono a fondo questa piattaforma.

Blazor

Blazor è incluso in ASP.NET Core 3.0 e versioni successive. Offre un nuovo meccanismo per la creazione di applicazioni client Web interattive avanzate con Razor, C# e ASP.NET Core. Offre un'altra soluzione da considerare quando si sviluppano applicazioni Web moderne. Esistono due versioni di Blazor da considerare: lato server e lato client.

Blazor lato server è stato rilasciato nel 2019 con ASP.NET Core 3.0. Come suggerisce il nome, viene eseguito sul server, eseguendo il rendering delle modifiche apportate al documento client nel browser in rete. Blazor lato server offre un'esperienza client avanzata senza richiedere JavaScript sul lato client e senza richiedere caricamenti di pagina separati per ogni interazione di pagina client. Le modifiche nella pagina caricata vengono richieste ed elaborate dal server e quindi inviate al client tramite SignalR.

Blazor lato client, rilasciato nel 2020, elimina la necessità di eseguire il rendering delle modifiche nel server. Sfrutta invece WebAssembly per eseguire codice .NET all'interno del client. Se necessario, il client può comunque effettuare chiamate API al server per richiedere i dati, ma tutto il comportamento lato client viene eseguito nel client tramite WebAssembly, che è già supportato da tutti i browser principali ed è solo una libreria JavaScript.

Riferimenti: applicazioni Web moderne