Miroslav Holec
Premium

.NET, .NET Core, .NET Framework, ASP.NET Core aneb jak se v tom všem vyznat

Miroslav Holec   30. října 2021

Tento článek je již zastaralý. Článek nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Pojmenování produktů nikdy nebyla silná stránka Microsoftu. Když už si vývojář začíná na názvy zvykat, Microsoft přijde s novým názvem a vnese tak do vývojářského světa svěží chaos. Jen velmi zřídka přitom změna názvu produktu znamená i zásadní změny v produktu. Z mé zkušenosti si v konečném důsledku vývojářské týmy objednávají úplně jiná školení, než potřebují. Odhalím to naštěstí velmi brzy díky dotazníkům nebo komunikaci s týmem ještě před samotným konáním školení. Chaos je to zcela zbytečný a musíme s ním žít. V tomto článku udělám v pojmologii trochu pořádek. Tedy alespoň tam, kde to trochu jde.

Pojďme si udělat takový slovníček. Klíčové technologie jsou seřazeny od nejstarších po současné. Ty související vkládám mezi ně spíše pro dokreslení souvislostí.

ASP

Toto je už skutečně velmi historický pojem, ale budeme s ním v dalším výkladu pracovat. ASP označuje tzv. "Active Server Pages", což není nic jiného než kombinace HTML, XML a skriptů. Právě skripty mohou být spouštěné na straně serveru. Provádí je ASP engine, který po dokončení interpretace vrátí na klienta hotové HTML. Funguje to velmi podobně jako například PHP. ASP nemá nic společného s ASP.NET frameworkem, přestože vývojáři rádi "ASP.NET" zkracují na ASP, čímž do éteru vypouští mnoho zmatku a dokážou tím pamětníkům dosti zamotat hlavu.

.NET Framework

Původní framework od Microsoftu. Dnes už velký moloch, který Microsoft začal vytvářet koncem 90. let minulého století. Vývojáři jej aktivně začali používat v novém miléniu a své největší slávy se zasloužil až s příchodem verzí 2.0 a 3.0. Dnes je nejvyšší dostupná verze frameworku 4.8 a Microsoft již neplánuje žádné další rozšiřování. Nadále je však .NET Framework součástí operačního systému Windows a díky tomu je i aktivně záplatován. Ještě že tak.

CLR

CLR je zkratka pro "Common Language Runtime" a odkazuje na virtuální běhové prostředí, které zajišťuje provádění .NET Framework aplikací. CLR je distribuován společně s .NET Frameworkem a stojí za zmínku, že verzování .NET Frameworku a CLR se nepatrně rozchází. Úkolem CLR je načíst DLL knihovny, provádět JIT kompilaci, starat se o správu paměti skrze GC a další důležité věci. Aktuální verze CLR je 4 a běží nad ní .NET Framework verze 4.0 a vyšší.

ASP.NET

ASP.NET je součástí tradičního .NET Frameworku. Prefix ASP myšlenkově odkazuje na starou technologii ASP a fakt, že ASP.NET slouží též k vývoji webových aplikací a služeb. Framework ASP.NET přinesl několik konceptů tvorby webových aplikací. Mezi nejznámější patří ASP.NET WebForms, ASP.NET MVC a ASP.NET Web Pages. Protože je ASP.NET součástí .NET Frameworku, jeho budoucnost je s .NET Frameworkem spjatá a odkázaná na pouhé bezpečnostní záplaty. Jednotlivé přístupy mají i jisté nástupce:

  • ASP.NET MVC má pokračovatele ASP.NET Core MVC
  • ASP.NET Web Pages má pokračovatele ASP.NET Core Razor Pages
  • ASP.NET WebForms nemá přímého pokračovatele

Razor

Když se řekne Razor, zpravidla se tím myslí syntaxe pro vytváření dynamických webových stránek. Razor v sobě kombinuje HTML a programovací jazyk (C# / VB.NET). Historie Razoru sahá do roku 2010 a vývojáři si jej poprvé vyzkoušeli v ASP.NET MVC 3. Razor syntaxe se dochovala až do dnešních moderních frameworků, včetně technologie Blazor (s drobnými odlišnostmi). Razor a příchod MVC 3 z mého hlediska odstartoval zcela novou éru aplikací napsaných v .NET Frameworku a začal pomalu zavírat dveře za technologií WebForms. Soubory se syntaxí Razor jsou obvykle s příponou cshtml. Nové Blazor soubory pak s příponou razor. I zde se Microsoft s pojmenováním vyznamenal.

ASP.NET Web API

ASP.NET Web API je druh projektové šablony, který slouží jako základní boilerplate pro vývoj HTTP služeb. Záměrně se vyhýbám pojmu "framework". Microsoft totiž v minulosti o Web API / HTTP API nebo REST API nepřemýšlel jako o samostatné technologii. Místo toho jednoduše vytvořil různá rozšíření kolem MVC, aby vývojářům usnadnil vývoj webových služeb. Vrcholem snažení byla projektová šablona ASP.NET Web API 2, která ještě více rozšířila MVC (konkrétně MVC 5) a umožnila mimo jiné definovat samostatnou pipeline pro webové aplikace a webové API. Microsoft v té době zároveň přidal nové funkcionality, které se ve frameworku dochovaly až doposud. Kdo by neznal routování pomocí atributů nebo CORS middleware.

OData

Iniciativu Open Data Protocol (OData) Microsoft zahájil během roku 2007. OData je standardizovaný protokol pro vývoj a konzumaci HTTP API. Microsoft se jej od počátku pokoušel integrovat s dalšími technologiemi, čímž si zejména ve světě .NET Frameworku získal popularitu. Zřejmě nejznámější je kombinace ASP.NET WebAPI + Entity Framework. Přestože vzniklo mnoho nástrojů i na dalších platformách (například Java či PHP), o vyloženě úspěšný protokol se z multiplatformního pohledu nejedná. S nástupem řady JavaScript frameworků se oblibě začal těšit spíše architektonický styl REST a OData dnes pomalu mizí. Je vhodné zde poznamenat, že OData nejsou z podstaty zcela slučitelné s REST omezeními a principy, přestože jsou o tom někteří vývojáři skálopevně přesvědčení a slovem REST se dokumentace k OData jenom hemží. Stojí za zmínku, že OData mohou vývojáři používat i v dnešních moderních aplikacích.

ASP.NET SignalR

A konečně zde máme knihovnu ASP.NET SignalR, kterou Microsoft vytvořil za účelem asynchronní komunikace mezi serverem a klientem. Původní knihovna pro ASP.NET byla a je distribuována jako separátní NuGet balíček pro serverovou a klientskou část. Klientská část mohla být instalována i skrze npm a balíček signalr. Původní release se datuje k roku 2013 a technologii zde uvádím spíše pro doplnění souvislostí v dalších odstavcích. SignalR oceníte tam, kde chcete v téměř reálném čase komunikovat mezi browserem a serverem.

ASP.NET 5

Pojem ASP.NET 5 se skloňoval zejména v roce 2015. Microsoft v té době plánoval též vydání technologie .NET Core 5 a Entity Framework 7. Na poslední chvíli si ale uvědomil, že .NET Core je příliš odlišný od zbytku .NETu a tak názvy změnil. Konkrétně:

  • místo .NET Core 5 vydal .NET Core 1.0
  • místo ASP.NET 5 vydal ASP.NET Core 1.0
  • místo EF 7 vydal Entity Framework Core 1.0

Víceméně tedy vytvořil nový produkt. Ponechal v něm ono ošklivé ".NET" a přidal ponděkud nesmyslné "Core". Svědčí to o tom, že v době psaní .NET Core ještě nikdo v MS neměl moc představu, jaká bude jeho budoucnost.

.NET Core

Pojem .NET Core označuje zbrusu nový framework, který myšlenkově navazuje na .NET Framework. V současné době nabízí téměř identická API jako původní .NET Framework, avšak implementace je odlišná. S .NET Corem žijeme již od roku 2016 a od své doby urazil dlouhou cestu. Poslední verze byla označena jako .NET Core 3.1, přičemž verze další začal Microsoft označovat jako .NET. Když se řekne .NET Core, de facto se mluví o základní sadě knihoven pro vývoj konzolových aplikací a společný základ pro všechny další typy aplikací (web, desktop). V samotném .NET Core nelze psát webové aplikace. Vždy je k tomu potřeba hromada dalších balíčků nebo nejlépe celý webový framework ASP.NET Core.

ASP.NET Core

ASP.NET Core je webový framework, který navazuje na tradiční ASP.NET. Technicky vzato se ASP.NET Core skládá ze základního frameworku .NET Core a z nezávislých NuGet balíčků. Ty Microsoft od verze 3.0 pro jednoduchost poskládal do jednoho celku a zabalil je jako jednotný framework. V minulosti tak činil skrze tzv. metabalíčky. Součástí ASP.NET Core je i webový server Kestrel a řada knihoven, které umožňují vytvářet různé typy webových aplikací. Situace je zde ale trochu komplikovanější než v případě ASP.NETu. Microsoft totiž sjednotil mnoho částí frameworku a MVC, Razor Pages či Web API již od sebe nelze striktně oddělit. Všechny druhy aplikací používají například společné routování, middleware pipeline nebo princip filtrů. Proto když se mluví o ASP.NET Core frameworku, bavíme se vždy o všech typech webových aplikací.

.NET Standard

Samotný .NET Standard je víceméně jen specifikace. Každá verze .NET Standardu popisuje seznam API, které implementující frameworky musí kompletně poskytovat. Je přitom jedno jak efektivně. Cílem .NET Standardu bylo umožnit vývojářům tvorbu univerzálních DLL knihoven použitelných jak ve tradičním .NET Frameworku tak v novém .NET Core nebo .NETu. Tvůrci knihoven se snaží vytvářet balíčky na co nejnižší verzi .NET Standardu, aby poskytli kompatibilitu i do starších technologií. Vyšší verze .NET standardu však zpřístupňují nové funkce nebo zajišťují minimálně efektivnější provedení napsaného kódu.

ASP.NET Core gRPC

S verzí webového frameworku ASP.NET Core 3.0 Microsoft též přidává podporu pro nový druh aplikací označovaný jako gRPC. Jedná se o druh webových služeb využívajících protokol HTTP/2. Specifikem je přístup contract-first, kterého je docíleno pomocí datového formátu Protocol Buffers. Tento druh aplikací využívá z větší části funkcionality webového frameworku ASP.NET Core v kombinaci s kompilerem souborů Protobuf do jazyka C#.

ASP.NET Core Blazor (WebAssembly aka WASM)

S příchodem prvních preview frameworku .NET Core 3.0 Microsoft představil též experimentální technologii Blazor. Ta v sobě zahrnula Razor syntaxi a možnost psát klientské ASP.NET Core aplikace, které se překládají pro běh ve WebAssembly. Blazor je tedy UI framework, přičemž model hostování Blazor WebAssembly běží na straně klienta (browseru). Technologii vývojáři nicméně ponechali v Preview a do frameworku ASP.NET Core se dostala až ve verzi 5.0 jako GA. V době psaní tohoto článku (říjen 2021) stále není Blazor WebAssembly deklarován s LTS (dlouholetá podpora).

ASP.NET Core Blazor (Server)

Blazor Server zveřejnil Microsoft v ASP.NET Core 3.1 a zadeklaroval ji společně se zbytkem stacku jako LTS až do prosince 2022. Vývojáři Microsoftu v podstatě využili čerstvě zmigrované technologie SignalR do .NET Core. Je vhodné dodat, že ASP.NET SignalR klient není kompatibilní s ASP.NET Core SignalR. Blazor Server pak ve své podstatě funguje na straně serveru, přičemž interakce v UI se přenáší jako instrukce na server právě skrze SignalR. Server poté vypočítá rozdíl v DOM a pošle tento rozdíl zpět na klienta. Vzhledem k běhu na serveru může vývojář používat standardní přístup k datům a Blazor Server je tak unikátní techologií, která umožňuje vytvářet SPA bez potřeby programovat HTTP API.

.NET

A konečně zde máme také .NET. Ten je nástupcem frameworku verze .NET Core 3.1 a jeho první oficiální verze je .NET 5. Microsoft tím konečně škrtá nesmyslný suffix "Core" a ponechává jen základ s otravnou tečkou na začátku. Frameworky ASP.NET Core a Entity Framework Core si svůj název ponechávají i nadále. Funkčně nepřináší .NET 5 ani blížící se .NET 6 žádné revoluční změny a význam nové .NET 6 verze spočívá zejména ve stabilizaci vývojářského stacku. Verze .NET 6 je vydána s LTS a jedná se o první verzi frameworku s nativní podporou ARMových čipů M1 z rodiny Apple Silicion.

Shrnutí

Pojďme si shrnout všechno to názvosloví do několika závěrečných bodů:

  • .NET Framework (až do v. 4.8) je starý framework s podporou záplat
  • .NET Core (1.0 - 3.1) je nový moderní framework pro vývoj aplikací
  • .NET (5, 6, 7) je jen přejmenovaný .NET Core a navazuje na něj
  • ASP.NET a ASP.NET Core jsou webové frameworky
  • ASP.NET Core je nadstavba nad .NET Core / .NET
  • ASP.NET (Core) Web API není framework ale jen sada knihoven, šablona projektu

Zajímavý je zejména poslední bod. Je vhodné ještě jednou poznamenat, že Microsoft doposud nikdy nevytvořil cíleně framework pro účely vývoje REST API. Poskytl protokol OData (který REST trošku obchází) a pak různé knihovny zabalené do balíčků, které vývojářům umožňují stavit REST API pohodlněji. Situace se ale stále lepší a s příchodem .NET 6 se dočkáme i zjednodušeného routování pro REST API, které nebude k běhu potřebovat řadu MVC služeb.

Teď už máte v názvech produktů a frameworků určitě jasno.