Miroslav Holec
Premium

Co v .NET 7 a C# 11 stojí za pozornost

Miroslav Holec   8. března 2023

Článek se vztahuje k verzi produktu .NET 7 a C# 11

Každá nová verze .NETu dokáže trochu zamíchat kartami a přinutí mě udělat menší či větší množství zásahů do školení. Poslední verze .NETu patří k těm umírněnějším. Na základě prvních měsíců školení novinek přináším shrnutí toho, co vývojáře nejvíce zajímá a co se mi v osnově ustálilo.

Minimal APIs

Microsoft v .NET 6 představil nový způsob vývoje REST API, který je založen na deklarativním zápisu endpointů bez zbytečné ceremonie kolem MVC. Funkcionalita byla pojmenována trochu nešťastně a vypuštěna v poměrně osekané verzi. Vývojáři nabyli mylného dojmu, že tento typ programování najde užitek jen na malých API. V .NET 7 přibyly dvě větší funkcionality. Jednak je možné endpointy seskupovat a jednak lze na endpointy a skupinami nastavovat filtry. Kromě toho jsme se dočkali lepší podpory streamů, binding query parametrů na objekty, podporu čtení z pipes nebo binding souborů na IFormFile a IFormFileCollection. Zkrátka toto téma si už zasloužilo samostatné celodenní školení, ve kterém ukazuji možnosti, jak Minimal APIs použít i pro stavbu větších projektů. V osnově školení Novinek v .NET 7 jsem ponechal jen ukázku principů a nové funkce přidané do .NET 7.

Vývoj aplikací v ASP.NET Core

Pro vývojáře vstupující do světa nového .NETu (tedy z tradičního .NET Frameworku 4.x) mám už roky přichystané školení "Vývoj aplikací v ASP.NET Core". S příchodem .NET 7 jsem musel do osnovy zasáhnout jen mírně. V první řadě si myslím, že už by měl každý začít používat novou třídu WebApplication představenou již v .NET 6 a s ní nová související API. Jde to sice pořád ještě po staru s IWebHost, ale nebude to mít dlouhé trvání. Ostatní obsah jsem se snažil moc neměnit, protože novinky z .NET 7 do něj nevstupují. Samozřejmě už vše ukazuji s přihlédnutím k vychytávkám v C# 11, ale vždy se jedná spíše o syntaktická vylepšení a drobnosti.

Do školení Novinek v .NET 7 jsem toho zařadil více. Kromě zmíněných změn v projektové šabloně jsem se více zaměřil na nové a vylepšené dotnet nástroje. Jedním z nich je například nástroj pro vytváření JWT tokenů. Více také ukazuji princip kompilace, assembly trimming, publikaci do single file nebo fungování hot reloadu. Další větší kapitolou jsou různá rozšíření pro JSON serializaci. Dnes již považuji za standard znalost práce rozhraní s IAsyncEnumerable jak na straně serveru tak klienta. Větší kapitolou jsou také middlewares. Zde Microsoft přidal v minulé verzi HTTP Logging, v novém .NETu pak Output Cache a Rate Limiting. Pozornost si zaslouží i ProblemDetailsService pro lepší management chyb v REST API.

.NET 7 a C# 11

Konečně se dostáváme k samotnému .NETu a jazyku C#. Ukázky nových funkcí mám vždy připravené v samostatném projektu. Tento rok je nových vychytávek v C# pramálo. Týkají se často práce s literály. V interpolaci lze používat klasické uvozovky nebo složené závorky. Při deklaraci stringu pomocí literálu u8 je možné řetězec automaticky typovat na objekt ReadOnlySpan<byte>. Vylepšil se mírně i pattern matching. Ten umožňuje porovnávat pole a řetězce vůči ReadOnlySpan<char> typu. Nový modifikátor file nastavuje viditelnost tříd pouze pro daný soubor a po letech jsme se dočkali možnosti vytvářet generické atributy.

Novinky v .NET BCL se snaží napříkad usnadnit život vývojářům na unixu. Přidána byla podpora balíčkování a extrakce TAR archivu nebo možnost číst a nastavovat oprávnění u adresářů a souborů na unixu. Vedle nedávno představených typů DateOnly a TimeOnly můžeme od .NET 7 pracovat pohodlně s milisekundami, mikrosekundami a nanosekundami. Malé vylepšení se dostalo do LINQu, ve kterém lze používat nové metody Order a OrderDescending. Z větších souborů lze nyní efektivněji číst pomocí metod ReadAtLeast a ReadExactly, které byly přidány na FileStream.

Závěr a doporučení

Přestože zásadních novinek v .NET 7 a C# 11 není mnoho, každý si najde něco pro sebe. Doporučuji se již držet nové podoby projektových šablon a seznámit se s principem assembly trimmingu. Tvůrci REST API by měli rozhodně vyzkoušet Minimal APIs a nástroj pro tvorbu JWT tokenů. Za zvážení by stálo seznámení se s ProblemDetailsService a její využití místo vlastních middlewares pro handlování výjimek. Pro vývoj tradičních MVC aplikací doporučuji vyzkoušet Output Caching. Vše ostatní jsou spíše okrajové vychytávky, na které dříve či později budeme v projektech narážet.

Zdroje ke studiu