Sdílet prostřednictvím


Pokyny k přenosu desktopové aplikace

Většinu kódu aplikace je možné zařadit do jedné z následujících oblastí:

  • Kód uživatelského rozhraní (např. okna a tlačítka)
  • Ovládací prvky třetích stran (např. grafy)
  • Obchodní logika (např. ověřovací pravidla)
  • Místní úložiště dat a přístup
  • Webové služby a vzdálený přístup k datům

Pro model Windows Forms a aplikace WPF napsané pomocí jazyka C# (nebo visual Basic.NET) je překvapivý objem obchodní logiky, přístupu k místním datům a kódu webových služeb možné sdílet napříč platformami.

Analyzátor přenositelnosti .NET

Visual Studio 2017 a novější podporují analyzátor přenositelnosti .NET (ke stažení pro Windows), který dokáže prozkoumat vaše stávající aplikace a zjistit, kolik kódu se dá přenést na jiné platformy.

K dispozici je také nástroj příkazového řádku, který můžete stáhnout z Analyzátoru přenositelnosti na GitHubu a použít ho k poskytování stejných sestav.

"x% mého kódu je přenosné. Co dál?"

Doufáme, že analyzátor ukazuje, že velká část kódu je přenosná, ale určitě bude existovat některé části každé aplikace, které se nedají přesunout na jiné platformy.

Různé bloky kódu pravděpodobně spadají do jednoho z těchto kbelíků, které jsou vysvětleny podrobněji níže:

  • Opakovaně použitelný přenosný kód
  • Kód, který vyžaduje změny
  • Kód, který není přenosný a vyžaduje opětovné zápis

Opakovaně použitelný přenosný kód

Kód .NET, který je napsaný proti rozhraním API dostupným na všech platformách, se dá přecházet beze změny. V ideálním případě budete moct veškerý tento kód přesunout do knihovny přenosných tříd, sdílené knihovny nebo knihovny .NET Standard a pak ho otestovat ve stávající aplikaci.

Tuto sdílenou knihovnu pak můžete přidat do projektů aplikací pro jiné platformy (například Android, iOS, macOS).

Kód, který vyžaduje změny

Některá rozhraní API .NET nemusí být dostupná na všech platformách. Pokud tato rozhraní API ve vašem kódu existují, budete muset tyto oddíly znovu napsat, abyste mohli používat rozhraní API pro různé platformy.

Mezi příklady patří použití rozhraní API Reflexe ion, která jsou k dispozici v .NET 4.6, ale nejsou k dispozici na všech platformách.

Po opětovném napsání kódu pomocí přenosných rozhraní API byste měli být schopni tento kód zabalit do sdílené knihovny a otestovat ho ve stávající aplikaci.

Kód, který není přenosný a vyžaduje opětovné zápis

Mezi příklady kódu, který pravděpodobně nebude mezi platformami, patří:

  • Uživatelské rozhraní – obrazovky model Windows Forms nebo WPF se například nedají použít v projektech v Androidu nebo iOSu. Uživatelské rozhraní bude potřeba znovu napsat pomocí tohoto porovnání ovládacích prvků jako referenci.

  • Úložiště specifické pro platformu – kód, který využívá technologii specifickou pro platformu (například místní databázi SQL Serveru Express). Budete to muset znovu napsat pomocí multiplatformní alternativy (například SQLite pro databázový stroj). Některé operace systému souborů mohou být také potřeba upravit, protože UPW má mírně odlišná rozhraní API pro Android a iOS (např. některé systémy souborů rozlišují malá a velká písmena a jiné ne).

  • Komponenty třetích stran – Zkontrolujte, jestli jsou komponenty třetích stran ve vašich aplikacích dostupné na jiných platformách. Některé, například ne vizuálové balíčky NuGet, můžou být dostupné, ale jiné (zejména vizuální ovládací prvky, jako jsou grafy nebo přehrávače médií)

Tipy pro přenositelný kód

  • Injektáž závislostí – poskytování různých implementací pro každou platformu a

  • Vícevrstvý přístup – bez ohledu na to, jestli MVVM, MVC, MVP nebo jiný vzor, který vám pomůže oddělit přenosný kód od kódu specifického pro platformu.

  • Zasílání zpráv – Pomocí předávání zpráv v kódu můžete de-párovat interakce mezi různými částmi aplikace.