Doprovodné materiály k portům desktopové aplikace

Většinu kódu aplikace lze rozdělit 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ř. spojnic
  • Obchodní logika (např. ověřovací pravidla)
  • Místní úložiště dat a přístup k nim
  • Webové služby a vzdálený přístup k datům

u aplikací model Windows Forms a WPF napsaných v jazyce C# (nebo Visual Basic .net) je možné sdílet překvapivé množství obchodní logiky, místní přístup k datům a kód webové služby na různých platformách.

Analyzátor přenositelnosti .NET

Visual Studio 2017 a novější podporují analyzátor přenositelnosti .net (stažení pro Windows), který může prošetřit vaše stávající aplikace a zjistit, kolik kódu je možné přenést na jiné platformy. Z tohoto videa na Channel 9se můžete dozvědět víc.

nástroj příkazového řádku je možné stáhnout z analyzátoru přenositelnosti na GitHub a použít k poskytnutí stejných sestav.

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

Snad analyzátor zobrazuje velkou část kódu, která je přenosná, ale opravdu se jedná o 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 kontejnerů, které jsou podrobněji vysvětleny 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 zapsaný v rozhraních API dostupných na všech platformách, se dá vzít beze změny. V ideálním případě budete moct veškerý tento kód přesunout do přenositelné knihovny tříd, sdílené knihovny nebo knihovny .NET Standard a potom ho otestovat v rámci stávající aplikace.

Sdílenou knihovnu je pak možné přidat do aplikačních projektů pro jiné platformy (například Android, iOS, macOS).

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

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

Mezi příklady patří použití rozhraní API pro reflexi, která jsou k dispozici v rozhraní .NET 4,6, ale nejsou k dispozici na všech platformách.

Po přepsá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 v rámci stávající aplikace.

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

Příklady kódu, které nemůžou být mezi různými platformami, zahrnují:

  • uživatelské rozhraní – model Windows Forms nebo obrazovky WPF se nedají použít v projektech v androidu nebo iOS, například. Vaše uživatelské rozhraní bude nutné přepsat, a to pomocí tohoto ovládacího prvku porovnáte jako odkaz.

  • úložiště – kód specifický pro platformu, který spoléhá na technologii specifickou pro konkrétní platformu (například na místní databázi SQL Server Express). Budete ho muset přepsat pomocí alternativy pro různé platformy (například SQLite pro databázový stroj). Některé operace se systémem souborů můžou být taky nutné upravit, protože UWP mají mírně odlišná rozhraní API pro Android a iOS (např. u některých systémů souborů nejsou rozlišována velká a malá písmena a jiné nejsou.

  • komponenty třetích stran – ověřte, jestli jsou komponenty třetích stran ve vašich aplikacích dostupné na jiných platformách. některé, například balíčky bez vizuálního NuGet, mohou být k dispozici, ale jiné (zejména vizuální ovládací prvky, jako jsou grafy nebo přehrávače médií).

Tipy pro zajištění přenosného kódu

  • Vkládání závislostí – poskytuje různé implementace pro každou platformu a

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

  • Zasílání zpráv – v kódu můžete použít předávání zpráv k rozdílným interakcím mezi různými částmi aplikace.