Conseils sur le portage d’applications de bureau

La plupart du code d’application peut être classé dans l’un des domaines suivants :

  • Code d’interface utilisateur (par exemple, fenêtres et boutons)
  • Contrôles tiers (par exemple, graphiques)
  • Logique métier (par exemple, règles de validation)
  • Stockage et accès aux données locales
  • Services web et accès aux données à distance

Pour les applications Windows Forms et WPF écrites en C# (ou Visual Basic.NET), une quantité surprenante de la logique métier, de l’accès aux données locales et du code des services web peut être partagée entre les plateformes.

Analyseur de portabilité .NET

Visual Studio 2017 et versions ultérieures prennent en charge l’analyseur de portabilité .NET (télécharger pour Windows) qui peut examiner vos applications existantes et vous indiquer la quantité de code pouvant être porté « tel quel » sur d’autres plateformes.

Il existe également un outil en ligne de commande qui peut être téléchargé à partir de l’Analyseur de portabilité sur GitHub et utilisé pour fournir les mêmes rapports.

« x % de mon code est portable. Et ensuite?

Espérons que l’analyseur montre qu’une grande partie de votre code est portable, mais il y aura certainement certaines parties de chaque application qui ne peuvent pas être déplacées vers d’autres plateformes.

Différents blocs de code se trouvent probablement dans l’un de ces compartiments, expliqués plus en détail ci-dessous :

  • Code portable réutilisable
  • Code nécessitant des modifications
  • Code non portable et nécessitant une réécriture

Code portable réutilisable

Le code .NET écrit sur les API disponibles sur toutes les plateformes peut être modifié sur plusieurs plateformes. Dans l’idéal, vous serez en mesure de déplacer tout ce code dans une bibliothèque de classes portable, une bibliothèque partagée ou une bibliothèque .NET Standard, puis de le tester dans votre application existante.

Cette bibliothèque partagée peut ensuite être ajoutée à des projets d’application pour d’autres plateformes (comme Android, iOS, macOS).

Code nécessitant des modifications

Certaines API .NET peuvent ne pas être disponibles sur toutes les plateformes. Si ces API existent dans votre code, vous devez réécrire ces sections pour utiliser les API multiplateformes.

Par exemple, l’utilisation des API Reflection qui sont disponibles dans .NET 4.6, mais qui ne sont pas disponibles sur toutes les plateformes.

Une fois que vous avez réécrit le code à l’aide d’API portables, vous devez être en mesure d’empaqueter ce code dans une bibliothèque partagée et de le tester dans votre application existante.

Code non portable et nécessitant une réécriture

Voici des exemples de code qui ne sont pas susceptibles d’être multiplateformes :

  • Interface utilisateur : les écrans Windows Forms ou WPF ne peuvent pas être utilisés dans des projets sur Android ou iOS, par exemple. Votre interface utilisateur doit être réécrit, en utilisant cette comparaison de contrôles comme référence.

  • Stockage spécifique à la plateforme : code qui s’appuie sur une technologie spécifique à la plateforme (telle qu’une base de données SQL Server Express locale). Vous devez réécrire cela à l’aide d’une alternative multiplateforme (telle que SQLite pour le moteur de base de données). Certaines opérations du système de fichiers peuvent également devoir être ajustées, car UWP a des API légèrement différentes d’Android et iOS (par exemple, certains systèmes de fichiers respectent la casse et d’autres ne le sont pas).

  • Composants tiers : vérifiez si les composants tiers de vos applications sont disponibles sur d’autres plateformes. Certains, tels que les packages NuGet non visuels, peuvent être disponibles, mais d’autres (en particulier des contrôles visuels comme des graphiques ou des lecteurs multimédias)

Conseils pour rendre le code portable

  • Injection de dépendances : fournir des implémentations différentes pour chaque plateforme, et

  • Approche en couches : qu’il s’agisse de MVVM, MVC, MVP ou d’un autre modèle qui vous aide à séparer le code portable du code spécifique à la plateforme.

  • Messagerie : vous pouvez utiliser le passage de messages dans votre code pour dé-coupler les interactions entre différentes parties de l’application.