Pro cílení na platformu Android je nezbytné mít nainstalovaný alespoň jeden Android SDK. Výchozí instalace Visual Studio 2022 s pracovním zatížením pro mobilní vývoj již obsahuje jeden Android SDK, avšak často se jedná o starší verzi, která podporuje co nejvíce zařízení Android. Pokud chcete využívat nejnovější funkce .NET MAUI, je třeba nakonfigurovat novější virtuální zařízení Android.
Pokud používáte Windows, začněte Visual Studio 2022 a v případě, že se zobrazí úvodní okno, klikněte na „Pokračovat bez kódu“. Poté přejděte na „Nástroje | Android | Správce zařízení Android“ a povolte změny, pokud vás o to požádá Řízení uživatelských účtů. V okně Správce zařízení Android klikněte na tlačítko „+ Nové“ pro vytvoření nového zařízení. V následujícím dialogovém okně vyberte následující možnosti:
-
Základní zařízení: Pixel 5
-
Procesor: x86_64
-
OS: Android 13.0 – API 33
-
Google API: Vybráno
-
Google Play Store: Neoznačeno
Po uložení a přijetí licenčních podmínek je potřeba počkat na stažení potřebných souborů. Jakmile je virtuální zařízení vytvořeno, klikněte na tlačítko „Start“, čímž spustíte zařízení. Po spuštění zařízení otestujte připojení k síti otevřením webového prohlížeče a přístupem na https://www.bbc.co.uk/news. Po ukončení testu zavřete emulátor a Správce zařízení Android, a následně restartujte Visual Studio 2022, aby bylo o novém emulátoru informováno.
Pro vývoj aplikací pro Windows je nezbytné aktivovat vývojářský režim. Tento režim povolíte tak, že přejdete na „Start | Nastavení | Soukromí a zabezpečení | Pro vývojáře“ a přepnete volbu na „Vývojářský režim“. Poté přijměte varování o možných bezpečnostních rizicích.
Dalším krokem je vytvoření projektu pro multiplatformní aplikaci pomocí .NET MAUI. Vytvoření nového projektu v Visual Studio pro Windows je jednoduché – vyberte šablonu „.NET MAUI App/maui“, přičemž jako jazyk vyberte C# a projektový typ MAUI. Po vybrání odpovídající šablony se vytvoří složka projektu s názvem například „Northwind.Maui.Client“. Pokud se při spuštění objeví výstraha o blokování některých funkcí bránou firewall, vyberte „Privátní sítě“ a povolte přístup.
V souboru projektu si všimněte, že jsou zde definovány cílové platformy pro iOS, Android, Mac Catalyst a Windows. Pokud se objeví chyba „Error NU1012: Platform version is not present for one or more target frameworks“, použijte příkaz „dotnet workload restore“, aby se načetly potřebné pracovní zátěže.
Pro spuštění aplikace na emulátoru vyberte správnou verzi frameworku a emulátor zařízení, který jste vytvořili. Po spuštění aplikace na emulátoru Android se ujistěte, že funguje správně – například kliknutím na tlačítko „Click me“ pro inkrementaci čítače.
Pro testování aplikace na Windows přepněte na framework „net7.0-windows“ a vyberte „Windows Machine“. Po spuštění aplikace si všimněte, že aplikace na Windows bude mít stejné chování jako na Androidu, například inkrementaci čítače po kliknutí na tlačítko.
Důležité je, že aplikace .NET MAUI automaticky využívají tmavý režim, pokud je tento režim povolen v systému. Ačkoli v této kapitole doporučuji pracovat v režimu světlém, v budoucích verzích knihy se zaměřím na to, jak přizpůsobit aplikace pro tmavý režim, pokud o to budou čtenáři mít zájem.
Pro správné testování aplikací je nezbytné aplikace spustit na všech zařízeních, pro která jsou určeny. I když v této kapitole výslovně neuvádím, že byste měli aplikaci testovat na všech zařízeních po každé změně, doporučuji tak učinit. Tímto způsobem získáte představu o tom, jak aplikace vypadá a funguje na různých zařízeních, a to jak na mobilním zařízení s vertikálním rozlišením, tak na desktopovém zařízení s větším horizontálním rozlišením.
Po přidání dalších stránek a navigace do aplikace .NET MAUI se doporučuje zkontrolovat strukturu projektu. V souboru „MauiProgram.cs“ zkontrolujte, že objekt „builder“ volá „UseMauiApp“ a specifikuje aplikaci jako generický typ. Dále se ujistěte, že jsou správně přidány fonty, které budou použity v aplikaci.
Jak definovat pozici a řez v C# pomocí Index a Range
V C# existují dvě nové struktury, které umožňují snadnější práci s pozicemi v polích a kolekcích: System.Index a System.Range. Tyto typy byly představeny jako součást rozšíření jazyka v novějších verzích .NET a C#, a přinášejí výhody jak v oblasti čitelnosti, tak v oblasti flexibility při práci s daty.
Přístup k položkám v poli je standardně realizován pomocí indexu, který je celé číslo, jak ukazuje následující příklad:
Zatímco tento přístup je běžně používaný, System.Index poskytuje formálnější způsob definice pozice, který také podporuje čítání od konce pole. To je užitečné při práci s daty, kdy chcete snadno přistupovat k posledním položkám bez nutnosti manuálně počítat délku pole.
Definování pozice pomocí Index
System.Index umožňuje definovat pozici buďto od začátku (defaultní chování), nebo od konce pole, což přináší větší flexibilitu. Ukázka následujících příkladů ukazuje, jak definovat pozice ve formátu Index:
Použití Index tímto způsobem vám umožní snadno vyjádřit pozice relativní vůči konci kolekce, což činí kód čistším a srozumitelnějším, zejména v případech, kdy se pracuje s proměnlivými datovými strukturami, kde se velikost kolekce může měnit.
Definování rozsahu pomocí Range
Další zajímavou funkcí, kterou System.Range poskytuje, je schopnost definovat rozsah pomocí začátečního a koncového indexu. Tento typ také používá Index pro specifikování začátku a konce řezů. Range může být definován několika způsoby, což umožňuje flexibilitu v syntaxi:
Použití Range přináší možnost vyjádřit rozsah přímo a přehledně. Například 3..7 je syntakticky velmi čistý a intuitivní způsob, jak definovat rozsah mezi indexy, který je snadno čitelný i pro nováčky.
Novinky v C# 9 a .NET 5
V C# 9 a .NET 5 došlo k mnoha novým funkcím, které rozšiřují možnosti jazyka a usnadňují práci s kódem. Mezi nejvýznamnější novinky patří:
-
Rozšířené možnosti pro pattern matching (typové vzory, vztahové vzory s operátory
<,>, atd.). -
Podpora pro generátory zdrojového kódu, které mohou přidávat kód, ale nemohou upravovat existující.
-
Nový typ
record, který umožňuje práci s neměnnými objekty, a nový klíčové slovoinit, které umožňuje nastavit hodnotu jen při inicializaci objektu.
Příklad definice neměnného objektu pomocí record:
Tento zápis je stručný a automaticky generuje vlastnosti, konstruktor a deconstructor, což značně usnadňuje práci s datovými objekty, které by měly být neměnné.
Novinky v C# 10 a .NET 6
V C# 10 a .NET 6 byly přidány další vylepšení, která usnadňují práci s projekty. Klíčové novinky zahrnují:
-
Implicitní import globálních jmenných prostorů, což znamená, že není nutné opakovaně psát
usingv každém souboru. -
Lambda výrazy jsou nyní snadněji zapisovatelné díky inferenci typu delegátů.
-
Zavedení nového typu
record struct, což umožňuje definici hodnotových typů jako neměnné.
S těmito změnami je kód jednodušší, přehlednější a výrazně zkrácený. Místo toho, abyste ve všech souborech psali znovu using System, můžete použít globální using pro import běžně používaných knihoven:
Co je důležité pro čtenáře pochopit
S použitím Index a Range můžete značně zjednodušit práci s kolekcemi a polích. Je však důležité mít na paměti, že novinky v C# 9 a 10, jako jsou pattern matching, record a implicitní using direktivy, nejenom že zjednodušují kód, ale také přinášejí novou filozofii práce s kódem. Měli byste se zaměřit na to, jak nové funkce mohou zjednodušit vaše každodenní úkoly v C# a usnadnit správu projektů.
Jak správně implementovat lokalizaci a kulturovou kompatibilitu v .NET aplikacích?
Pro načítání prostředků z těchto satelitních sestav používáme některé standardní typy .NET nazvané IStringLocalizer a IStringLocalizerFactory. Implementace těchto rozhraní jsou načítány z .NET generického hostitele jako závislé služby.
Začneme tím, že přidáme odkazy na balíčky pro práci s generickým hostitelem a lokalizací do projektu WorkingWithCultures. Tento krok je nezbytný pro zajištění, že aplikace bude schopna využívat nástroje potřebné pro správnou lokalizaci. Po přidání těchto balíčků je nutné projekt zkompilovat, aby se obnovily závislosti.
V dalším kroku vytvoříme složku Resources v kořenovém adresáři projektu, kde umístíme XML soubor, který bude obsahovat výchozí jazykové prostředky. Tento soubor, nazvaný PacktResources.resx, bude obsahovat prostředky pro výchozí jazyk aplikace, obvykle ekvivalent angličtiny (USA). Obsah souboru může vypadat následovně:
Další klíčovou součástí projektu je vytvoření třídy PacktResources.cs, která bude zajišťovat načítání textových prostředků pro uživatelské rozhraní. V této třídě použijeme IStringLocalizer pro získávání lokalizovaných řetězců. Ukázková implementace třídy může vypadat takto:
V metodě GetEnterYourNamePrompt je implementováno několik kroků pro získání lokalizovaného řetězce a kontrolu, zda byl nalezen. Pokud řetězec není nalezen, zobrazí se chybová zpráva, která obsahuje informace o cestě vyhledávání. Další metody jsou zjednodušené a při neexistenci prostředků používají název klíče jako záložní hodnotu.
Po implementaci třídy PacktResources přichází na řadu konfigurace hostitele aplikace, který bude podporovat lokalizaci. Toho dosáhneme tím, že do Program.cs přidáme potřebné importy a konfiguraci služeb, jak ukazuje následující ukázkový kód:
V tomto kroku také nastavujeme cestu k souborům prostředků, aby bylo možné je správně načítat z podadresáře.
Poté, co změníme aktuální kulturu, použijeme služby PacktResources pro výpis lokalizovaných výzev pro zadání jména, data narození a platu. Na základě zadaných údajů aplikace vypíše detaily osoby, jak ukazuje následující kód:
Po tomto kroku můžeme spustit aplikaci a ověřit, že prostředky jsou správně načítány, a to i pro různé kultury. Pro otestování, zda aplikace správně podporuje lokalizaci, přidáme do složky Resources nové soubory XML s lokalizovanými řetězci pro různé jazyky, například dánštinu nebo francouzštinu.
Tento proces je základním stavebním kamenem pro implementaci lokalizace v .NET aplikacích. Umožňuje flexibilitu v přizpůsobení aplikace pro různé jazyky a kultury, což je nezbytné pro aplikace, které mají globální dosah.
Při vytváření lokalizovaných souborů .resx je důležité pamatovat na správnou strukturu a názvy souborů, protože .NET automaticky načítá prostředky podle názvu kultury. Například soubor pro dánštinu bude mít název PacktResources.da.resx a pro francouzštinu ve verzi pro Kanadu PacktResources.fr-CA.resx.
Pokud budete pracovat s více kulturami, mějte na paměti, že můžete mít různé soubory pro různé verze jazyka, což umožňuje cílení na specifické regiony a jejich jazykové zvyklosti.
Jak otestovat .NET klienta a využívat GraphQL pro kombinování datových zdrojů
Pro otestování .NET klienta s GraphQL, je nutné provést několik kroků, které umožní ověřit správnou funkčnost a komunikaci s GraphQL službou. Začněme krok za krokem.
Nejprve spusťte projekt Northwind.GraphQL pomocí jeho https profilu bez ladění. Poté spusťte projekt Northwind.Mvc.GraphQLClient také s https profilem. Pokud je vše nastaveno správně, měli byste vidět produkty úspěšně načtené pomocí GraphQL, jak je znázorněno na obrázku, kde je zobrazený seznam produktů v kategorii nápojů. Pokud změníte ID kategorie, například na 4, GraphQL služba správně vrátí produkty v této kategorii. V případě, že zadáte ID kategorie, které je mimo rozsah, například 13, vrátí služba 0 produktů.
Dalším krokem je zavření prohlížeče Chrome a vypnutí webového serveru pro projekt Northwind.Mvc.GraphQLClient. Poté v souboru HomeController.cs úmyslně upravte dotaz tak, aby obsahoval chybu – například změňte název proměnné productId na productid. Následně spusťte projekt bez ladění a klikněte na tlačítko pro zobrazení nebo skrytí podrobností. V tomto okamžiku by měla být zobrazena chybová zpráva a detaily odpovědi, které indikují problém s dotazem.
Další významnou součástí této integrace je použití knihovny Strawberry Shake, která je specifická pro .NET klienty. Namísto používání běžných HTTP klientů poskytuje ChilliCream výkonnou knihovnu pro snadnější vytváření .NET klientů pro GraphQL služby. Pro více informací o tomto nástroji se doporučuje navštívit oficiální dokumentaci.
Vytvoření klienta pro konzolovou aplikaci je dalším krokem, který vám umožní využít výhod Strawberry Shake. Nejprve přidejte nový projekt typu Console App, pojmenovaný Northwind.GraphQL.Client.Console. Poté v příkazové řádce vytvořte soubor manifestu nástrojů pomocí příkazu dotnet new tool-manifest a nainstalujte nástroje Strawberry Shake pomocí příkazu dotnet tool install StrawberryShake.Tools --local. Dále do projektu přidejte potřebné NuGet balíčky a konfigurace pro závislosti a generování kódu.
Při generování kódu pro GraphQL službu je nutné upravit soubor graphqlrc.json, kde nastavíte jmenný prostor pro generovaný kód, URL pro připojení k GraphQL službě a různé parametry pro validaci schématu, strategii požadavků a výstupní adresář pro generované soubory. Tento soubor také umožňuje konfiguraci specifických profilů pro HTTP a WebSocket transport.
Vytvořený soubor seafoodProducts.graphql definuje dotaz pro získání produktů z kategorie mořských plodů. Tyto soubory musí mít specifické názvy, aby je Strawberry Shake mohl správně zpracovat a vygenerovat odpovídající třídy pro použití v aplikaci. Po sestavení projektu se automaticky vygeneruje složka Generated, která obsahuje třídy reprezentující GraphQL schéma.
V programu Program.cs odstraníme původní příkazy a přidáme nové pro vytvoření služby, která bude komunikovat s naším klientem NorthwindClient. Tato služba je nakonfigurována tak, aby se připojila k GraphQL službě pomocí správné URL adresy. Následně pomocí této služby spustíme asynchronní požadavek na produkty mořských plodů a výsledek se vypíše v konzoli.
Přechod k implementaci GraphQL mutací je nezbytným krokem pro služby, které potřebují upravit data, nikoliv pouze je dotazovat. Mutace v GraphQL mají tři základní komponenty: samotnou mutaci, která definuje změnu dat; vstupní objekt, který specifikuje data pro mutaci; a payload, což je výstupní objekt, který obsahuje výsledky změn. Tento proces je zásadní pro správnou manipulaci s daty ve vaší aplikaci.
Pro implementaci mutace pro přidání produktu do databáze je nutné v projektu Northwind.GraphQL přidat soubor Mutation.cs, kde definujete třídy pro mutaci, vstupní objekt a payload. Tento přístup vám umožní efektivně pracovat s GraphQL a spravovat data v reálném čase.
Chápání tohoto procesu je klíčové pro efektivní práci s GraphQL v .NET prostředí. Je důležité nejen umět dotazovat data, ale také správně manipulovat s daty pomocí mutací. K tomu je nutné správně definovat schéma, správně zachytávat a spravovat chyby a být si vědom všech nástrojů, které usnadňují práci s GraphQL, jako jsou Strawberry Shake a další knihovny.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский