Miroslav Holec
Premium

Kompletní pohled na .NET 6

Miroslav Holec   14. září 2021  update 21. listopadu 2021

Článek se vztahuje k verzi produktu .NET 6

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.

Nová verze frameworku .NET 6 klepe na dveře a s jeho příchodem se alespoň na chvíli zastaví vývojářský svět. Po dlouhé době se dočkáme stabilní verze produktu, která do vývojářských dílen přinese stabilitu a klid, který mohou vývojáři využít ke splátce technického dluhu. V tomto speciálu Dotnet News se podíváme na to, co nás v listopadu čeká.

Obsah speciálu


Speciál jsem napsal poprvé 14. září 2021. Dne 21. listopadu jsem se rozhodl článek doplnit na základě nových zkušeností po 'vydání .NET 6 releasu. Původní článek nechávám nezměněn a nové poznámky dopisuji touto barvou.

⭐ Stabilizace frameworku s .NET 6

Microsoft 10. srpna vypustil již sedmé a poslední preview nového frameworku .NET 6. Vývojáři mají poslední a velmi malou šanci ovlivnit jeho konečnou podobu. Poté Microsoft vydá dvě RC verze a nakonec se dočkáme finálního LTS releasu. Nová verze .NETu přinese zejména stabilitu a splátku technického dluhu v oblasti runtimů. Proklamovaný „One .NET“ se konečně stane skutečností a vývojáři z celého světa se v blízké době na této verzi potkají. Podpora starého .NET Core 2.1 skončila v srpnu, .NET 5 přijde o záplaty v polovině února 2022 a .NET Core 3.1 na konci roku 2022. Dříve či později budeme všichni nuceni updatovat své projekty a je milé poznamenat, že nová LTS verze nám poskytne podporu až do listopadu 2024.

Tři roky dlouhá podpora nám dá čas konečně vydechnout a věnovat se rozvoji aplikací namísto neustálého přepínání verzí frameworku a přepisování jinak fungujícího kódu. Změn navíc nebude mnoho a migrace z .NET 5 proběhne hladce. Nová verze dotnetu bude svázaná též s novou verzí jazyka C# 10.0 a Visual Studiem 2022. Z funkčního hlediska Microsoft otevře dveře minimalistickému nastavení projektů a pro nadšence do Blazoru též přinese řadu drobných funkcionalit. S nadsázkou se tedy .NET 6 zapíše do dějin jako dlouhou dobu potřebná stabilizace vývojářského stacku.

Plánujete-li migrovat ze starších verzí frameworku, mrkněte na mé školení zaměřené na migraci.

ŠKOLENÍ - Migrace .NET Core 2.x > 3.x > 5.x > 6.x

Během půldenního školení si ukážeme změny a vylepšení, které vás neminou s přechodem na novější verzi webového frameworku ASP.NET Core.

Více o školení

⭐ Minimalismus v .NETu

Projektové šablony v .NET Core si vývojáři od samého počátku chválí. Oproti tradičnímu frameworku jsou mnohem srozumitelnější a Microsoft věnuje mnoho úsilí, aby tomu tak i nadále zůstalo. Důkazem je nedávné představení generického host prostředí a jeho univerzální využití pro různé druhy aplikací. Kombinace řady návrhových vzorů umožnila velmi jasnou a srozumitelnou konfiguraci projektů včetně nastavení IoC kontejneru. Oproti jiným platformám .NET zaostává jen v drobném detailu. Zatímco alternativní frameworky jsou konfigurovatelné na jednom místě a v jednom souboru, .NET konfigurace je separována v Program.cs a Startup.cs. Druhý jmenovaný soubor je navíc typický jen pro webové aplikace. To se teď radikálně změní.

Prvotní motivací pro zjednodušení se stala vývojářům z Redmondu webová API. Bez nich se dnes neobejdeme ať už jde o výměnu dat nebo poskytnutí dat pro různé UI aplikace včetně Blazoru. Inspirací se stal zřejmě Express.js a jemu podobné frameworky, protože výsledek je nadmíru podobný. Od nové verze .NETu budeme schopni designovat REST API v jediném souboru pomocí nové třídy WebApplication. To s sebou nese nejen jednodušší proces návrhu, ale i definitivní eliminaci zbytečného MVC frameworku. Nutno dodat, že tato cesta je zatím opt-in. Nadále bude možné udržovat HTTP API i v tradiční podobě pomocí controllerů.

Update 21.11. - funkcionalita by měla poskytnout podle měření 2x vyšší rychlost než v případě MVC. Součástí minimal apis je ale méně binderů a zcela chybí podpora validace a content negotiation. Mnoho nastavení se musí dopisovat ručně pomocí extension metod. To v praxi znamená, že si vývojář bude muset napsat mnoho vlastního kódu, aby se vyhnul dlouhým deklaracím API endpointů.

V Preview 7 Microsoft přišel s nečekaným a v celkem logickým závěrem. Když už umíme definovat v jednom souboru Web API, proč bychom tak nemohli definovat i jiné webové aplikace? A tak se rozloučíme s třídou Startup.cs a nově si vystačíme s konfigurací aplikace v jediném souboru - Program.cs. Díky funkcionalitě Top-Level Statements navíc nebudeme potřebovat vytvářet C# třídu a obligátní metodu Main. Jednoduché, čisté a pro některé vývojáře dozajista i matoucí.

Update 21.11. - po důkladném zkoumání mi přijde jen zvláštní, že snaha o unifikaci v podobě IHost končí novou třídou WebApplication. Nově tedy existuje více cest, které vedou k témuž cíli. Kromě odlišného zápisu se přitom nic dalšího nemění.

⭐ Entity Framework Core bez radikálních změn

Poslední verze EF Core 5.0 přinesla širokou paletu nových funkcí a díky zacílení na .NET Standard 2.1 si ji lze vychutnat i ve starší verzi .NET Core 3.1. Nová verze EF Core 6 bude dostupná pouze v .NET 6 a bez migrace projektu si tak nové funkce vývojáři nevyzkouší. Naštěstí není třeba zoufat, protože zásadních funkcionalit v nové verzi ORM mnoho není. Stejně jako v případě celého .NET ekosystému se vývojáři zaměřili zejména na odstranění chyb, vylepšení stávající implementace a zlepšování výkonnosti. Přechod z EF Core 5 bude v konečném důsledku zcela hladký a motivací nám bude zejména stabilizace v podobě LTS až do listopadu 2024.

Chcete-li vstoupit do světa EF Core, pomůže vám mé jednodenní školení.

Update 21.11. - do EF Core 6 vstoupily dle očekávání dvě větší funkcionality (podpora Temporal Tables ze SQL Serveru a Migration Bundles). Pro vývojáře, kteří tyto funkce neocení se mnoho nemění.

⭐ Budoucnost bez .NET Standardu

Microsoft představil před více než pěti lety .NET Standard jako sadu univerzálních API, které zajišťují vzájemnou kompatibilitu mezi různými frameworky. V současné době již přestal dávat smysl, jelikož poslední verze 2.1 nenašla podporu v .NET Frameworku a samotný .NET Framework nechce Microsoft dále rozšiřovat. Nový .NET 5 vyšel po vlastní cestě.

Bylo by však nefér pohřbít .NET Standard v mauzoleu dějin. Vytváříte-li stále NuGet balíčky distribuované pro tradiční .NET Framework, pak zřejmě budete i nadále využívat .NET Standard 2.0 jako základní TFM. Verze .NET Standard 2.1 bude též vhodná tam, kde budete chtít zajistit podporu pro aplikace postavené nad .NET Core 3.1. Naopak pro vývojáře, kteří půjdou výhradně cestou .NET 5, .NET 6 a novějších už .NET Standard přestane dávat smysl.

Nové C# knihovny nyní budeme cílit na konkrétní verze .NETu, stejně jako v případě running projektů. V praxi bude knihovna napsaná pro určitou verzi frameworku spustitelná vždy ve stejné a vyšších verzích projektů díky zpětné kompatibilitě. Když tedy vytvoříte knihovnu pro .NET 5, budete ji moci používat v .NET 6, .NET 7 a vyšších verzích projektů. Dostáváme se tedy do podobné situace, jaká panovala na počátku 21. století v tradičním frameworku.

Zajímáte-li se o tvorbu univerzálních knihoven, naplánovaných úloh nebo nástrojů, vřele doporučuji mé školení zaměřené na tooling v .NETu.

⭐ Blazor jen do deštivého počasí

O budoucnosti Web Assembly se poslední měsíce vedou dlouhé diskuse. Tak se už zdá, že si WASM vytváří své místo v komunitách zaměřených na gaming a těžbu kryptoměn, o využití v tradičním webu se dá ale těžce spekulovat. Roadmapa poslední měsíce nevnáší příliš mnoho jistot a žádané oblasti jako exception handling nebo module linking jsou stále nedokončené. Vedle oblíbeného Rustu si .NET platforma s Blazorem vede překvapivě dobře a snaží se k sobě strhnout pozornost vývojářů. Vývojáři se zalíbením v JavaScriptu jsou však vůči Blazoru zdá se imunní a odvahu vydat se touto cestou tak mají zejména vývojářské týmy, které tíhnou k .NETu a všeho JavaScriptu světa se štítí. Typickou základnu příznivců tvoří vývojáři přecházející z desktopu do webového prostředí, kteří považují Blazor jako menší zlo v kontrastu s JavaScriptem. Zda bude Microsoftu tato malá skupina vývojářů stát za udržování frameworku lze jen těžko odhadovat. S ohledem na chystaný .NET 6 elánu neubývá a vývojáři se i tentokrát dočkají mnoha Blazor novinek, které na projektech zajisté ocení. Za sebe si dovolím další rok strčit hlavu do písku a Blazor na sebe ani v deštivém počasí neobléknu.

Update 21.11. - Blazor WASM je součástí LTS releasu a vývojáři mají alespoň jistotu podpory do listopadu 2024. Microsoft vydal společně s .NET 6 mnoho aktualizací i pro Blazor, čímž ho postavil z funkčního hlediska tam, kde byla před lety většina JS frameworků. Pro vývojáře, kteří hledají řešení pro full-stack vývoj a nevstoupili doposud do světa JS to může být alternativní volba. Otázka, zda vstup do JS není větší cesta jistoty visí stále ve vzduchu.

⭐ Visual Studio 2022 přešlapuje na místě

S velkou slávou se vývojáři dočkají i nové verze Visual Studia. Konkrétně v17.0 označovaná též jako Visual Studio 2022 vyjde jak pro platformu Windows tak pro macOS. Marketingově nás Microsoft pod rouškou lehce fialových barev láká na 64-bitový upgrade, podporu C++ 20 a údajně doposud nejlepší IntelliCode s ultimátním laděním aplikací. V praxi Microsoft skutečně využívá strojového učení za účelem generování větších bloků kódu, avšak stále zapomíná na základní funkcionality, které například konkurenční Rider využívá několik let. Na jedné straně tak VS dokáže generovat for cyklus s ohledem na napsaý kód, na straně druhé stále nedokáže automaticky napovídat statická rozšíření, na kterých je valná část .NETu postavena. Dá se obecně říci, že VS 2022 nabízí mnoho pokročilých funkcí, které vývojáři v praxi nebudou často používat a dlouhodobě žádaných funkcí se opět nedočkáme. Milé drobnosti jako drag and drop breakpointů tak potěší spíše dlouholeté uživatele Visual Studia, než pokročilé vývojáře zvyklé na rozšíření ReSharper nebo na konkurenční prostředí Rider.

V případě platformy macOS byla nová verze Visual Studia zastřena hromadou tajností a přístup k Preview byl umožněn jen omezenému množství vývojářů. Demo na mě ani tři měsíce před vydáním nepůsobilo příliš dokončeně a z hlediska funkčnosti nedošlo oproti předchozí verzi téměř k žádným novinkám. Microsoft sice pár nových funkcí přidal, principielně ale stále ponechal v pozadí silný zápach původního Xamarin Studia. VS for Mac je tak stále těžkopádně ovladatelné, nabízí nelogické klávesové zkratky a vůbec jde cestou zcela odlišnou než vlajkové IDE pro Windows. Jediným společným prvkem zůstává název a barevná kombinace.

⭐ Rider spasitel

Rider je alternativní IDE prostředí pro vývoj .NET aplikací, které mohou vývojáři používat na platformách Windows, Linux a macOS. Na rozdíl od Visual Studia je IDE na všech platformách totožné a až na drobné detaily nabízí stejné funkce. Společnost JetBrains, která za produktem stojí, přináší minimálně dvakrát do roka větší release obsahující mnoho vylepšení. Na pravidelné bázi pak uvolňuje drobné záplaty. Odvážnější vývojáři mohou vstoupit do Early Access programu a těšit se méně stabilní preview verzi IDE.

Rider z hlediska funkcí dávno vystoupil ze stínu Visual Studia a představuje jedničku nejen z hlediska code discovery a refactoringu. Oproti VS není Rider zatížen snahou podporovat prehistorické typy projektů a vyznačuje se tak velmi hbitým chodem a krátkou reakční dobou. Poslední verze opět ukázala Visual Studiu záda v mnoha oblastech. Zjevné je to například u Open API Specifikace. Zatímco vývojáři v Redmondu se rozkoukávají a přidávají do šablon projektů Swagger, IDE od JetBrains už umí v náhledovém okně reflektovat webové endpointy a zobrazit jejich výčet včetně pohodlného debugování integrovaným HttpClientem.

Zatímco Visual Studio se poslední měsíce snaží generovat kód na základě strojového učení z velké codebase na githubu, Rider nadále volí tradiční přístupy. Doposud se mu tato strategie vyplácí, avšak Microsoft má v ohni želízka, která mohou do budoucna situaci radikálně změnit. Výhodu má MS i jakožto tvůrce frameworku a jazyka C#, kterou proměňuje v podobě včasných Preview verzí IDE. Rider je v tomto ohledu slepý a ne zcela vhodný pro experimentování s preview verzemi C# nebo frameworku jako takového. Hledáte-li však IDE nadupané funkcemi, které Vás pohladí rychlostí a plynulým chodem, Rider na tomto světě nemá konkurenci.

Update 21.11. - Rider nabízí nyní více možností, jak si IntelliSense přizpůsobit. Umí napovídat více způsoby a lze si nastavit, co každému lépe vyhovuje. Od vydání .NET 6 zatím vyšla pouze EAP verze. Finální Rider 2021.3 by měl být uvolněn do konce listopadu.

⭐ Xamarin.Forms se stěhují na MAUI

MAUI je poslední střípek ve skládačce .NET 6. Ať už je název jakkoliv hloupý, odráží přesně to, čím skutečně je. MAUI je multiplatformní App UI a poslouží ke stavbě nativních aplikací pro mobilní a desktopové aplikace. Jako kladivo a hřebík jsou v tomto případě C# a XAML. Z popisu znalý vývojář tuší, že Microsoftu přestal lahodit název Xamarin.Forms a místo toho potřeboval naznačit určitou evoluci a přinést na pár let nový velký pojem do světa .NETu. Tak jednoduché to ale není, protože .NET MAUI skutečně ušel velký kus cesty. Oproti Xamarin.Forms je vhodný pro vývoj desktopových aplikací pro různé platformy a kromě společné multiplatformní code base má vývojář stále volné ruce pro psaní platformě specifického kódu. Pro psaní kódu může vývojář volit buď paradigma MVVM nebo MVU. Pro přechod z Xamarin.Forms bude k dispozici .NET upgrade assistant a pro nové vývojáře se možná dočkáme i použitelné dokumentace. S tou to totiž vypadá zatím hodně bledě.

Update 21.11. - Zde to Microsoft moc nezvládl a MAUI vydal do .NET 6 releasu jako Preview. Ukazuje se, jak nešťastné je nastavit roční release cyklus a dvouletý LTS cyklus. Podle všeho GA nevyjde dříve než v průběhu roku 2022 a možná bude MAUI dobrým důvodem, proč by mohla vyjít v mezičase ještě jedna aktualizaci v LTS.

📆 Zapište si... 9. listopadu 2021

Od 9. do 11. listopadu se bude konat tradiční online konference Dotnet Conf a právě v rámci ní bude představena finální verze .NET 6.

Update 21.11. - Konference už proběhla a záznam si můžete pustit na YouTube.

⭐ Závěr a podzimní školení

Nová verze frameworku .NET 6 je z mého pohledu kriticky důležitá. Po dlouhých měsících dostane celá komunita v podstatě 3 roky na to, aby aktualizovala a stabilizovala své aplikace na LTS verzi frameworku. Spolu s tím vývojář dostane řadu výkonnostních vylepšení a zpřístupní si funkcionality jazyka C# 10. Migrace bude náročnější zejména pro vývojáře, kteří stále přešlapují na verzích 2.1 a 2.2. Z verze 3.1 už bude migrace výrazně snazší. Všechna má školení aktualizuji a promítám do nich novinky, které .NET 6 přinese. Přestože ještě není .NET 6 venku, už teď se na mých podzimních školeních dozvíte, jaké změny frameworku si ohlídat.