Egenskaper för moderna webbprogram

Dricks

Det här innehållet är ett utdrag från eBook, Architect Modern Web Applications med ASP.NET Core och Azure, som finns på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

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

"... med rätt design kommer funktionerna billigt. Den här metoden är svår, men fortsätter att lyckas."
- Dennis Ritchie

Moderna webbprogram har högre användarförväntningar och större krav än någonsin tidigare. Dagens webbappar förväntas vara tillgängliga dygnet från var som helst i världen och kan användas från praktiskt taget alla enheter eller skärmstorlekar. Webbprogram måste vara säkra, flexibla och skalbara för att möta toppar i efterfrågan. I allt högre grad bör komplexa scenarier hanteras av omfattande användarupplevelser som bygger på klienten med Hjälp av JavaScript och kommunikation effektivt via webb-API:er.

ASP.NET Core är optimerat för moderna webbprogram och molnbaserade värdscenarier. Dess modulära design gör det möjligt för program att bara vara beroende av de funktioner som de faktiskt använder, vilket förbättrar programsäkerhet och prestanda samtidigt som värdresurskraven minskar.

Referensprogram: eShopOnWeb

Den här vägledningen innehåller ett referensprogram, eShopOnWeb, som visar några av principerna och rekommendationerna. Programmet är en enkel onlinebutik, som stöder surfning genom en katalog med skjortor, kaffemuggar och andra marknadsföringsartiklar. Referensprogrammet är avsiktligt enkelt för att göra det enkelt att förstå.

eShopOnWeb

Bild 2-1. eShopOnWeb

Referensprogram

Molnbaserad och skalbar

ASP.NET Core är optimerat för molnet (offentligt moln, privat moln, alla moln) eftersom det är lågt minne och högt dataflöde. Det mindre fotavtrycket för ASP.NET Core-program innebär att du kan vara värd för fler av dem på samma maskinvara och du betalar för färre resurser när du använder molnvärdtjänster med betala per användning. Det högre dataflödet innebär att du kan betjäna fler kunder från ett program med samma maskinvara, vilket ytterligare minskar behovet av att investera i servrar och värdinfrastruktur.

Plattformsoberoende

ASP.NET Core är plattformsoberoende och kan köras på Linux, macOS och Windows. Den här funktionen öppnar många nya alternativ för både utveckling och distribution av appar som skapats med ASP.NET Core. Docker-containrar – både Linux och Windows – kan vara värdar för ASP.NET Core-program, så att de kan dra nytta av fördelarna med containrar och mikrotjänster.

Modulär och löst kopplad

NuGet-paket är förstklassiga medborgare i .NET Core och ASP.NET Core-appar består av många bibliotek via NuGet. Den här kornigheten av funktioner hjälper till att säkerställa att appar bara är beroende av och distribuerar funktioner som de faktiskt behöver, vilket minskar deras fotavtryck och säkerhetsproblem.

ASP.NET Core har också fullt stöd för beroendeinmatning, både internt och på programnivå. Gränssnitt kan ha flera implementeringar som kan växlas ut efter behov. Beroendeinmatning gör det möjligt för appar att löst koppla till dessa gränssnitt, snarare än specifika implementeringar, vilket gör dem enklare att utöka, underhålla och testa.

Testas enkelt med automatiserade tester

ASP.NET Core-program stöder enhetstestning och deras lösa koppling och stöd för beroendeinmatning gör det enkelt att byta infrastrukturproblem med falska implementeringar i testsyfte. ASP.NET Core levereras också med en TestServer som kan användas som värd för appar i minnet. Funktionella tester kan sedan göra förfrågningar till den här minnesinterna servern, utöva hela programstacken (inklusive mellanprogram, routning, modellbindning, filter osv.) och ta emot ett svar, allt på en bråkdel av den tid det skulle ta att vara värd för appen på en riktig server och göra förfrågningar via nätverksskiktet. Dessa tester är särskilt enkla att skriva och värdefulla för API:er, som blir allt viktigare i moderna webbprogram.

Traditionella beteenden och SPA-beteenden som stöds

Traditionella webbprogram har inte handlat om något beteende på klientsidan, men har i stället förlitat sig på servern för all navigering, alla frågor och uppdateringar som appen kan behöva göra. Varje ny åtgärd som görs av användaren skulle översättas till en ny webbbegäran, där resultatet blir en fullständig sidomläsning i slutanvändarens webbläsare. Klassiska MVC-ramverk (Model-View-Controller) följer vanligtvis den här metoden, där varje ny begäran motsvarar en annan kontrollantåtgärd, vilket i sin tur fungerar med en modell och returnerar en vy. Vissa enskilda åtgärder på en viss sida kan förbättras med AJAX-funktioner (Asynkrona JavaScript och XML), men appens övergripande arkitektur använde många olika MVC-vyer och URL-slutpunkter. Dessutom stöder ASP.NET Core MVC även Razor Pages, ett enklare sätt att organisera MVC-sidor.

Ensidesprogram (SPA) innebär däremot mycket få dynamiskt genererade sidinläsningar på serversidan (om några). Många SPA initieras i en statisk HTML-fil som läser in nödvändiga JavaScript-bibliotek för att starta och köra appen. Dessa appar använder webb-API:er i hög grad för sina databehov och kan ge mycket rikare användarupplevelser. BlazorWebAssembly tillhandahåller ett sätt att skapa SPA:er med hjälp av .NET-kod, som sedan körs i klientens webbläsare.

Många webbprogram omfattar en kombination av traditionellt webbprogrambeteende (vanligtvis för innehåll) och SPA:er (för interaktivitet). ASP.NET Core stöder både MVC (vyer eller sidbaserade) och webb-API:er i samma program, med samma uppsättning verktyg och underliggande ramverksbibliotek.

Enkel utveckling och distribution

ASP.NET Core-program kan skrivas med enkla textredigerare och kommandoradsgränssnitt eller fullständiga utvecklingsmiljöer som Visual Studio. Monolitiska program distribueras vanligtvis till en enda slutpunkt. Distributioner kan enkelt automatiseras som en del av en pipeline för kontinuerlig integrering (CI) och kontinuerlig leverans (CD). Förutom traditionella CI/CD-verktyg har Microsoft Azure integrerat stöd för git-lagringsplatser och kan automatiskt distribuera uppdateringar när de görs till en angiven git-gren eller tagg. Azure DevOps tillhandahåller en fullständig CI/CD-bygg- och distributionspipeline, och GitHub Actions tillhandahåller ett annat alternativ för projekt som finns där.

Traditionella ASP.NET och webbformulär

Förutom ASP.NET Core fortsätter traditionella ASP.NET 4.x att vara en robust och tillförlitlig plattform för att skapa webbprogram. ASP.NET stöder utvecklingsmodeller för MVC och webb-API, samt webbformulär, som passar bra för omfattande sidbaserad programutveckling och har ett omfattande ekosystem för komponenter från tredje part. Microsoft Azure har länge stöd för ASP.NET 4.x-program och många utvecklare är bekanta med den här plattformen.

Blazor

Blazor ingår i ASP.NET Core 3.0 och senare. Det ger en ny mekanism för att skapa interaktiva webbklientprogram med Razor, C# och ASP.NET Core. Den erbjuder en annan lösning att tänka på när du utvecklar moderna webbprogram. Det finns två versioner att Blazor tänka på: serversidan och klientsidan.

Serversidan Blazor släpptes 2019 med ASP.NET Core 3.0. Som namnet antyder körs den på servern och återger ändringar i klientdokumentet till webbläsaren via nätverket. Serversidan Blazor ger en omfattande klientupplevelse utan att kräva JavaScript på klientsidan och utan att kräva separata sidinläsningar för varje interaktion på klientsidan. Ändringar på den inlästa sidan begärs från och bearbetas av servern och skickas sedan tillbaka till klienten med SignalR.

Klientsidan Blazor, som släpptes 2020, eliminerar behovet av att återge ändringar på servern. I stället används WebAssembly för att köra .NET-kod i klienten. Klienten kan fortfarande göra API-anrop till servern om det behövs för att begära data, men allt beteende på klientsidan körs i klienten via WebAssembly, som redan stöds av alla större webbläsare och bara är ett JavaScript-bibliotek.

Referenser – moderna webbprogram