Kenmerken van moderne webtoepassingen

Tip

Deze inhoud is een fragment uit het eBook, Architect Modern Web Applications met ASP.NET Core en Azure, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.

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

"... met het juiste ontwerp zijn de functies goedkoop. Deze aanpak is lastig, maar blijft slagen."
- Dennis Ritchie

Moderne webtoepassingen hebben hogere verwachtingen van gebruikers en meer eisen dan ooit tevoren. De huidige web-apps zijn naar verwachting 24 uur per dag beschikbaar vanaf elke locatie ter wereld en kunnen worden gebruikt vanaf vrijwel elk apparaat of schermformaat. Webtoepassingen moeten veilig, flexibel en schaalbaar zijn om te voldoen aan pieken in de vraag. Steeds vaker moeten complexe scenario's worden afgehandeld door uitgebreide gebruikerservaringen die zijn gebouwd op de client met behulp van JavaScript en efficiënt communiceren via web-API's.

ASP.NET Core is geoptimaliseerd voor moderne webtoepassingen en cloudgebaseerde hostingscenario's. Dankzij het modulaire ontwerp kunnen toepassingen alleen afhankelijk zijn van de functies die ze daadwerkelijk gebruiken, waardoor de beveiliging en prestaties van toepassingen worden verbeterd en tegelijkertijd de hostingresourcevereisten worden verminderd.

Referentietoepassing: eShopOnWeb

Deze richtlijnen omvatten een referentietoepassing, eShopOnWeb, die enkele van de principes en aanbevelingen demonstreert. De toepassing is een eenvoudige online winkel, die ondersteuning biedt voor het bladeren door een catalogus met shirts, koffiemokken en andere marketingitems. De referentietoepassing is opzettelijk eenvoudig om het gemakkelijk te begrijpen.

eShopOnWeb

Afbeelding 2-1. eShopOnWeb

Referentietoepassing

In de cloud gehost en schaalbaar

ASP.NET Core is geoptimaliseerd voor de cloud (openbare cloud, privécloud, elke cloud) omdat deze laag geheugen en hoge doorvoer is. De kleinere footprint van ASP.NET Core-toepassingen betekent dat u meer van deze toepassingen op dezelfde hardware kunt hosten en dat u voor minder resources betaalt wanneer u cloudhostingservices per gebruik gebruikt. De hogere doorvoer betekent dat u meer klanten van een toepassing kunt bedienen op basis van dezelfde hardware, waardoor u verder hoeft te investeren in servers en hostinginfrastructuur.

Platformoverschrijdend

ASP.NET Core is platformoverschrijdend en kan worden uitgevoerd op Linux, macOS en Windows. Met deze mogelijkheid worden veel nieuwe opties geopend voor zowel de ontwikkeling als de implementatie van apps die zijn gebouwd met ASP.NET Core. Docker-containers, zowel Linux als Windows, kunnen ASP.NET Core-toepassingen hosten, zodat ze kunnen profiteren van de voordelen van containers en microservices.

Modulair en losjes gekoppeld

NuGet-pakketten zijn eersteklas burgers in .NET Core en ASP.NET Core-apps bestaan uit veel bibliotheken via NuGet. Deze granulariteit van functionaliteit helpt ervoor te zorgen dat apps alleen afhankelijk zijn van en functionaliteit implementeren die ze daadwerkelijk nodig hebben, waardoor hun voetafdruk en kwetsbaarheid voor beveiligingsproblemen worden verminderd.

ASP.NET Core biedt ook volledige ondersteuning voor afhankelijkheidsinjectie, zowel intern als op toepassingsniveau. Interfaces kunnen meerdere implementaties hebben die naar behoefte kunnen worden verwisseld. Met afhankelijkheidsinjectie kunnen apps losjes koppelen aan deze interfaces, in plaats van specifieke implementaties, waardoor ze gemakkelijker kunnen worden uitgebreid, onderhouden en getest.

Eenvoudig getest met geautomatiseerde tests

ASP.NET Core-toepassingen ondersteunen eenheidstests en hun losse koppeling en ondersteuning voor afhankelijkheidsinjectie maakt het eenvoudig om problemen met infrastructuur te wisselen met valse implementaties voor testdoeleinden. ASP.NET Core wordt ook geleverd met een TestServer die kan worden gebruikt voor het hosten van apps in het geheugen. Functionele tests kunnen vervolgens aanvragen indienen bij deze in-memory server, de volledige toepassingsstack uitoefenen (inclusief middleware, routering, modelbinding, filters, enzovoort) en het ontvangen van een antwoord, allemaal in een fractie van de tijd die nodig is om de app op een echte server te hosten en aanvragen te doen via de netwerklaag. Deze tests zijn vooral eenvoudig te schrijven en waardevol voor API's, die steeds belangrijker worden in moderne webtoepassingen.

Traditioneel en beveiligd-WACHTWOORDVERIFICATIEgedrag ondersteund

Traditionele webtoepassingen hebben weinig gedrag aan de clientzijde, maar in plaats daarvan zijn ze afhankelijk van de server voor alle navigatie, query's en updates die de app moet maken. Elke nieuwe bewerking die door de gebruiker wordt uitgevoerd, wordt omgezet in een nieuwe webaanvraag, waarbij het resultaat een volledige pagina opnieuw wordt geladen in de browser van de eindgebruiker. Klassieke MVC-frameworks (Model-View-Controller) volgen deze benadering doorgaans, waarbij elke nieuwe aanvraag overeenkomt met een andere controlleractie, die op zijn beurt zou werken met een model en een weergave zou retourneren. Sommige afzonderlijke bewerkingen op een bepaalde pagina kunnen worden uitgebreid met AJAX-functionaliteit (Asynchrone JavaScript en XML), maar de algehele architectuur van de app heeft veel verschillende MVC-weergaven en URL-eindpunten gebruikt. Daarnaast biedt ASP.NET Core MVC ook ondersteuning voor Razor Pages, een eenvoudigere manier om pagina's in MVC-stijl te organiseren.

Toepassingen met één pagina (SPA's) bevatten daarentegen zeer weinig dynamisch gegenereerde paginabelastingen (indien aanwezig). Veel SPA's worden geïnitialiseerd in een statisch HTML-bestand waarmee de benodigde JavaScript-bibliotheken worden geladen om de app te starten en uit te voeren. Deze apps maken intensief gebruik van web-API's voor hun gegevensbehoeften en kunnen veel rijkere gebruikerservaringen bieden. BlazorWebAssembly biedt een middel om SPA's te bouwen met behulp van .NET-code, die vervolgens wordt uitgevoerd in de browser van de client.

Veel webtoepassingen hebben betrekking op een combinatie van traditioneel gedrag van webtoepassingen (meestal voor inhoud) en SPA's (voor interactiviteit). ASP.NET Core ondersteunt zowel MVC (weergaven of op pagina's) als web-API's in dezelfde toepassing, met behulp van dezelfde set hulpprogramma's en onderliggende frameworkbibliotheken.

Eenvoudige ontwikkeling en implementatie

ASP.NET Core-toepassingen kunnen worden geschreven met eenvoudige teksteditors en opdrachtregelinterfaces of volledige ontwikkelomgevingen zoals Visual Studio. Monolithische toepassingen worden doorgaans geïmplementeerd op één eindpunt. Implementaties kunnen eenvoudig worden geautomatiseerd om te worden uitgevoerd als onderdeel van een ci-pijplijn (continue integratie) en cd-pijplijn (continuous delivery). Naast traditionele CI/CD-hulpprogramma's biedt Microsoft Azure geïntegreerde ondersteuning voor Git-opslagplaatsen en kan updates automatisch implementeren wanneer deze worden gemaakt in een opgegeven Git-vertakking of -tag. Azure DevOps biedt een volledige CI/CD-build- en implementatiepijplijn en GitHub Actions bieden een andere optie voor projecten die daar worden gehost.

Traditionele ASP.NET en webformulieren

Naast ASP.NET Core blijft traditionele ASP.NET 4.x een robuust en betrouwbaar platform voor het bouwen van webtoepassingen. ASP.NET biedt ondersteuning voor MVC- en Web-API-ontwikkelmodellen, evenals Web Forms, die geschikt is voor uitgebreide toepassingsontwikkeling op basis van pagina's en beschikt over een uitgebreid ecosysteem van onderdelen van derden. Microsoft Azure biedt grote ondersteuning voor ASP.NET 4.x-toepassingen en veel ontwikkelaars zijn bekend met dit platform.

Blazor

Blazor is opgenomen in ASP.NET Core 3.0 en hoger. Het biedt een nieuw mechanisme voor het bouwen van uitgebreide interactieve webclienttoepassingen met behulp van Razor, C# en ASP.NET Core. Het biedt een andere oplossing om rekening mee te houden bij het ontwikkelen van moderne webtoepassingen. Er zijn twee versies van Blazor om rekening mee te houden: serverzijde en clientzijde.

Serverzijde Blazor is uitgebracht in 2019 met ASP.NET Core 3.0. Zoals de naam al aangeeft, wordt deze uitgevoerd op de server, waardoor wijzigingen in het clientdocument weer in de browser via het netwerk worden weergegeven. Serverzijde Blazor biedt een uitgebreide clientervaring zonder javaScript aan de clientzijde te vereisen en zonder afzonderlijke paginabelastingen te vereisen voor elke interactie met clientpagina's. Wijzigingen op de geladen pagina worden aangevraagd en verwerkt door de server en worden vervolgens via SignalR teruggestuurd naar de client.

Clientzijde Blazor, uitgebracht in 2020, elimineert de noodzaak om wijzigingen op de server weer te geven. In plaats daarvan wordt gebruikgemaakt WebAssembly van het uitvoeren van .NET-code binnen de client. De client kan nog steeds API-aanroepen naar de server doen als dat nodig is om gegevens aan te vragen, maar alle gedrag aan de clientzijde wordt uitgevoerd in de client via WebAssembly, dat al wordt ondersteund door alle belangrijke browsers en slechts een JavaScript-bibliotheek is.

Verwijzingen – Moderne webtoepassingen