Co přináší .NET 6 pro webové vývojáře

Miroslav Holec       21.11.2021       .NET Core, ASP.NET Core       759 zobrazení

Microsoft v závěru roku 2021 výrazně unifikoval a stabilizoval vývojářskou platformu. Pro vývojáře to znamená jednak nutnost migrace na novou verzi, smíření se s aktuální vizí a seznámení se s některými novinkami. V minulosti jsem napsal článek "Velkolepý příchod .NET 6", který jsem se rozhodl pro velký úspěch aktualizovat. Najdete v něm pohled na .NET 6 ze 14. září 2021 doplněný o několik aktuálních myšlenek. Hledáte-li jen krátký přehled, pokračujte ve čtení tohoto příspěvku, ve kterém se pokusím zodpovědět jednoduchou otázku: "Co pro mě znamená příchod .NET 6".

Migrace na .NET 6

Chcete-li dostávat pravidelné aktualizace frameworku, situace je jednoduchá. Používáte-li .NET 5, měli byste migrovat do konce února 2022. Používáte-li .NET Core 3.1, máte čas do konce listopadu 2022. Ve všech ostatních případech už jste zřejmě pozadu a aktualizaci byste měli provést bez odkladu. V případě starších frameworků (např.: .NET Core < 3.1) by ještě dávalo smysl dočasně přejít na .NET Core 3.1, pakliže jste vytížení a na .NET 6ku nespěcháte.

Základní motivací pro migraci je držet se tzv. LTS verze, která Vám garantuje podporu a dodávání záplat frameworku po dobu 3 let.

Co potřebujete

Pro vývoj .NET 6 aplikací budete potřebovat Visual Studio 2022 (v17+) nebo Visual Studio 2022 for mac (v17+). Na platformě macOS a Linux doporučuji Rider (2021.3+), který vyjde do konce listopadu.

Co musíte udělat

Na to nejde jednoduše odpovědět. Náročnost migrace se odvíjí od toho:

  • jakou verzi frameworku nyní používáte
  • jak poctivě jste doposud migrace prováděli nebo zanedbávali
  • jaké technologie používáte a jakým způsobem (EF Core, Blazor)

Vývojáře na verzích nižších než .NET Core 3.1 bude čekat hodně práce a studia. Nejkratší cestou pro ně může být mé školení migrace. Naopak pro týmy, které jsou nyní na verzi .NET 5 bude migrace většinou snadná a zvládnou vše svépomocí během pár hodin. Více o migraci se dočtete na mém blogu.

Co dostanete

I zde záleží na tom, jaké technologie používáte. V případě tradičních serverových nebo konzolových aplikací (MVC, RazorPages, WebAPI, gRPC) nedostanete téměř nic, bez čeho byste se neobešli. Útěchou může být zejména dlouholetá podpora (do listopadu 2024), jazyk C# 10 a lepší performance. Vývojáři na macOS s čipem Apple Silicon dostanou nativní podporu frameworku. Větší arzenál funkcí nabízí jen EF Core a Blazor.

Co dostanete nakonec není moc podstatné, protože na .NET 6 stejně bude muset během roku 2022 přejít každý, kdo chce bezpečnostní záplaty.

Vize a budoucnost

Ať to vypadá jakkoli neuvěřitelně, Microsoft nemá dlouholetou vizi co se týče vývoje. Alespoň praxe to dokazuje. Nikdy soudný by nevymyslel název ".NET Core" pro framework, který se postupně stane mainstreamem a nikdo by nevydal technologii "Blazor WASM" v Preview, přičemž v mezičase vymyslel úplně jiný model hostování "Blazor Server" vydaný v LTS. Stejně tak by nikdo s vizí záměrně nelpěl na ročním release cyklu, aby na konferenci oznámil, že revoluční MAUI je v zatím Preview. Z mého pohledu je budoucnost a rozhodování Microsoftu stejně nevyzpytatelné, jako rozhodování české vlády v době koronakrize. To, že "nechceme další lockdown" ještě neznamená, že ho nezavedeme. A to, že je "Blazor" skvělý framework do kterého věnujeme úsilí neznamená, že ho při nejbližší možné příležitosti nezameteme pod koberec. Ale srandu stranou.

Aktuálně se zdá, že to Microsoft s Blazorem skutečně myslí vážně a hromadou nových funkcí ho postavil do výrazně lepší pozice, než tomu bylo před rokem. Navíc tu máme příslib záplat v rámci LTS releasu a sympatickou možnost efektivně zkombinovat Blazor s technologií gRPC-Web. Blazor je sice tam, kde většina JS frameworků před několika lety, přesto může být dobrou volbou pro týmy, které například migrují z desktopu na web a doposud nemají mezi sebou žádné uctívače JavaScriptu a TypeScriptu. Pro vývojáře s JS zkušenostmi, kteří již naskočili na React, Vue či Angular toho nemá moc co nabídnout.

Stabilní úsilí věnuje Microsoft do výkonnosti, takže i nadále dostáváme s každým releasem vylepšený framework, runtime nebo jiné knihovny. V případě .NET 6 to pocítíme v různých situacích od startu aplikace, přes JWT autentizaci až po rychlejší Protobuf serializaci v gRPC službách.

Novinky aneb co dostudovat

V případě novinek opět záleží, ze které verze frameworku budete migrovat. Když se zaměříme čistě na .NET 6, pak se vyloženě revoluce nekoná. Menších novinek je samozřejmě hromada, ne všechny však stojí za pozornost.

Nové projekty

Budete-li psát zcela nový projekt, měli byste zvážit použití Nullable Reference Types. Je to už sice starší funkcionalita, ale v .NET 6 projektech je automaticky zapnuta. Nové šablony projektu jsou minimalistické a konfiguraci projektu tak naleznete v jediném souboru Program.cs. V případě REST API můžete zvážit použití Minimal APIs, což vám umožní vytvářet REST API bez MVC mechanismu. Samotná infrastruktura v takovém případě bude 2x rychlejší než tradiční přístup s MVC. Budete-li vytvářet full-stack projekt (REST API + SPA framework), tak dostanete Bootstrap 5.1 a zkonfigurovaný webpack. Cílem Microsoftu bylo nabídnout standardní pattern pro SPA vývojáře a hlavně se zbavit povinnosti aktualizovat neustále Angular a React knihovny (což při ročním release cycle samozřejmě musí drhnout).

Core features & C# 10

Pak tu máme pár základních funkcí, které se dotknou všech vývojářů a které doporučuji prostudovat. Dříve či později se s nimi stejně setkáte a možná se Vám zalíbí natolik, že je již použijete v aktuálních projektech:

  • global + implicit usings
  • natural types v lambda výrazech
  • record structs

Za sebe doporučuji seznámit se s využitím IAsyncEnumerable. Není to sice novinka z .NET 6, avšak MVC controllery nově IAsyncEnumerable podporují stejně jako HttpClient. Lze tedy celkem efektivně vytvořit "async stream" komunikaci mezi dvěma endpointy bez toho, aniž by docházelo k nabufferování celého request/response jako je tomu v případě vrácení celé kolekce dat. Controllery a Razor Pages mají nově také dostupnou podporu pro IAsyncDisposable.

U existujících webových projektů lze nyní zapnout nový middleware pro logování HTTP požadavků (W3C log). Při šikovném nastavení lze pak tyto logy hrnout na libovolné místo a dále analyzovat.

Entity Framework Core

V případě EF Core máme k dispozici dvě větší novinky, které dost možná vůbec neoceníte a pak řadu menších vylepšení. První větší funkce se týká SQL Temporal Tables, druhá pak vytváření nástrojů pro migrace, tzv. Migration Bundles. Novinky kolem EF Core poctivě shrnul Jirka Činčura ve své přednášce na SQL Server Bootcampu. Dobrá zpráva je, že v EF Core není mnoho větších breaking changes, jako tomu bylo v minulosti.

Blazor

Do Blazoru vložil Microsoft mnoho času, takže novinek je zde poměrně mnoho a řada z nich Vás i přiměje sáhnout do existujícího kódu. Za sebe mě zaujala funkce Error Boundaries, která umožňuje konečně odchytávat na úrovni UI neohandlované výjimky. Další relativně základní funkcionalitu nabízí nové komponenty PageTitle a HeadContent pro úpravu značky HTML head a jejího obsahu (title, meta). Novinek v Blazoru je více, ale jako pasivní Blazor vývojář na miniaturních webech je moc neocením. V případě Blazor WebAssembly došlo i k mnoha optimalizacím (např. AOT kompilace nebo relinkink). Nově si Blazor dokáže vygenerovat například menší WASM runtime podle toho, co ve své aplikaci reálně používáte a okleštěný runtime rychleji doručit na klienta.

Co znamená migrace pro mě

Vzhledem k tomu, že většinu projektů mám napsaných stylem Razor Pages, tak .NET 6 příliš neprožívám. S přechodem na nový MacBook jsem ale rád za nativní podporu M1 čipu. Migraci jsem udělal postupně ještě před finální verzí a na 14 projektech jsem nenarazil na žádný problém. Aktuálně chystám menší microsite, na které vývojáře seznámím s něčím užitečným. Obsah zatím utajím. Web píšu v Blazor WASM, Nuxt a v Next.js, abych si technologie porovnal. Průběžně se snažím pročistit starší projekty a přidávám do nich trochu syntaktického cukru ze C#. Většina refaktoringu se týká pattern matchingu, globálních usings a namespaců. Občas místo tříd zavádím recordy a aktuálně se chystám extrahovat CSSka z cshtml do samostatných souborů (CSS izolace).


Videa o .NET 6

To nejzajímavější z .NETu se budu snažit průběžně ukazovat na mém YouTube kanále. Zdarma se můžete přihlásit k odběru a sledovat tak průběžně vybrané funkce na praktických ukázkách.

Videa na mém YouTube


Zeptejte se, 1. 12. 2021

Na 1. prosince 2021 chystám živý stream, během kterého můžete pokládat různé otázky kolem vývoje .NET aplikací. Dotaz můžete položit už při registraci a během streamu se budu snažit vybraná témata zodpovědět nebo Vás nasměrovat správným směrem.

Registrace na Dotnet Live

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

 

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback