.NET Standard – jedno API vládne všem

Když se někoho zeptáte, jestli zná .NET, nemůžete se divit, pokud vám odpoví otázkou: "Který?" Od roku 2002 tradiční vývojářská platforma Microsoftu rostla a bujela, až se z ní stal strom s větvemi pojmenovanými např. Framework, Compact Framework, Core, Mono, Unity, Xamarin atd. Každá větev se specializuje na konkrétní platformu a efektivně s ní funguje. Svět se ale změnil, aplikace jsou stále častěji multiplatformní a není výjimkou přesah z mobilních zařízení do cloudu a zpět na mikropočítače. Aby se zamezilo neudržitelné fragmentaci, bylo potřeba změnit i .NET.


V současnosti existují tři hlavní větve .NETu a každá z nich má svou knihovnu základních tříd (Base Class Library):

image

 

Co kdyby se podařilo nahradit řádek "Base Libraries" společnou vrstvou, takže aplikační modely by nemusely oddělovat, co mají na které platformě k dispozici? Co kdybychom mohli starý dobrý .NET v podobě, v jaké ho známe, použít na Windows i na Androidu nebo Raspberry Pi? Přivítejme .NET Standard:

image

.NET Standard je kontrakt, pevně daná sada API, kterou musí každá platforma implementovat, aby si mohla říkat .NET (výjimkou nejsou ani "tradiční" platformy – .NET Framework, .NET Core i Xamarin). Jedná se například o kolekce, vlákna a reflection, zkrátka základní stavební bloky, z nichž vývojáři dávají dohromady své knihovny. Jejich kompletní seznam najdete na GitHubu. Momentálně se připravuje verze 2.0, která vyjde spolu s novým Visual Studiem "15" a bude se referencovat jako NuGet balíček.

Čím se liší od Portable Class Libraries (PCL)? U PCL hledáte průnik API všech platforem, které chcete podporovat, a pak máte záruku, že knihovna bude fungovat na všech. Může se ale stát, že získáte jen velmi omezený set, nebo dokonce nakombinujete platformy, které žádnou společnou část nemají. Jejich definice je navíc statická, takže když se objeví nová platforma, na níž by knihovna fungovala bez problémů taky, nebude možné si ji z NuGetu stáhnout, dokud nevydáte novou verzi.

.NET Standard vychází z předpokladu, že .NET není jen jeden a že v budoucnosti mohou vznikat další platformy. Ať už od Microsoftu, tak od někoho jiného. Ať už pro Windows, tak pro operační systémy, které dnes ještě ani neexistují.

Postupně se dostáváme k tomu, pro koho je vlastně .NET Standard důležitý. Jsou to primárně dvě skupiny:

  • Tvůrci knihoven a NuGet balíčků
    • Cílí na konkrétní verzi .NET Standard.
    • Pokud si zvolí .NET Standard 1.x, získají sadu API velmi podobnou PCL a také velmi širokou podporu různých platforem. Ne všechny zatím mají svou implementaci .NET Standard.
    • Nový .NET Standard 2.x naproti tomu výrazně rozšíří sadu API a umožní závislost na knihovnách, které cílí na .NET Framework (protože ten implementuje .NET Standard 2.0).
  • Tvůrci platforem (operačních systémů, frameworků)
    • Nemusí vymýšlet, jaká API by měli poskytnout vývojářům knihoven, aby zajistili kompatibilitu – implementují .NET Standard konkrétní verze.

Třetí skupinou jsou pak koncoví vývojáři, kteří cílí na svou platformu (Xamarin, UWP, .NET Core...) a mohou se spolehnout, že budou mít k dispozici stejnou sadu základních knihoven (protože platforma implementuje .NET Standard).


Ve větším detailu si o připravované verzi .NET Standard 2.0 můžete přečíst v podrobném článku na blogu Dotnet.

Martin