Mutualisation de code
Introduction
L’intérêt principal de Xamarin réside dans la possibilité de partager du code entre plusieurs plateformes mobiles.
Plusieurs méthodes de partage de code existent et nous verrons dans ce chapitre chaque stratégie avec ses avantages et inconvénients.
Ensuite, nous verrons comment réaliser une injection de dépendance simple. Enfin, nous verrons l’architecture MVVM (Model View ViewModel) idéale pour mutualiser un maximum de code.
Quelles sont les possibilités pour partager son code en Xamarin ?
1. Présentation
Deux possibilités s’offrent à nous pour partager du code dans chacun de nos projets :
-
Utiliser un SharedProject.
-
Utiliser une Portable Class Library (PCL).
2. SharedProject
a. Présentation
Un SharedProject, comme son nom l’indique est un type de projet permettant de simplifier le partage de fichier entre projets.
Le SharedProject n’est pas une bibliothèque de classe, il ne produit aucun binaire. Lors de la compilation d’un des projets qui le référencent, les fichiers du SharedProject sont rajoutés au projet compilé.
Un SharedProject n’est jamais compilé tout seul, il existe uniquement pour regrouper des fichiers de code source et être inclus facilement dans un autre projet. Il ne peut pas avoir des références propres, mais il a accès aux références de tous les autres projets qui l’utilisent.
Par exemple
Si vous ajoutez une référence à MVVMLight sur vos projets iOS et Android, le SharedProject partagé entre ces deux OS aura aussi accès à MVVMLight.
Si dans le projet partagé vous utilisez MVVMLight et que l’un des projets qui l’appellent n’a pas référencé MVVMLight, ce dernier ne compilera pas.
Le grand avantage des SharedProjects est qu’ils supportent l’utilisation des directives de précompilation.
b. Avantage
Cette approche est très simple à utiliser. Elle autorise aussi l’utilisation des directives préprocesseur (voir la section Directive de préprocesseur).
c. Inconvénients
On ne peut pas distribuer un binaire de ce projet. Il sert uniquement au partage de code dans une solution que l’on maîtrise.
Il est difficile de partager un SharedProject entre plusieurs applications.
d. Création d’un SharedProject
Sous Visual Studio...
Injection de dépendance
1. Présentation
L’injection de dépendance, malgré son nom qui a l’air complexe, est un sujet beaucoup plus simple qu’on ne le pense au premier abord. L’idée générale est de s’appuyer uniquement sur des classes abstraites ou des interfaces dans le code commun entre les systèmes d’exploitation. Les implémentations de celles-ci sont alors faites dans le projet natif.
2. Mise en place
Pour mieux comprendre ce concept, prenons comme exemple une application qui permettra de lancer un appel téléphonique.
La mise en place se fera en 3 étapes :
-
Création de l’interface permettant de prototyper la méthode d’appel téléphonique. Cette interface sera partagée donc elle sera dans le code commun.
-
Implémentation de cette interface dans chacun des systèmes d’exploitation.
-
Création d’une classe Locator permettant d’instancier un type en fonction de l’interface passée en paramètre.
Architecture de notre système d’injection de dépendance
a. Création de l’interface
La première étape consiste à créer une interface qui permet de prototyper la méthode d’appel téléphonique. Elle sera donc commune aux différentes plateformes utilisées et aura donc autant d’implémentation de l’interface que de plateforme ciblée.
public interface IPlatformHelper
{
void CallPhone(string phoneNumber);
}
Nous avons donc une méthode CallPhone prenant en paramètre une chaîne de caractères (phoneNumber) correspondant au numéro de téléphone.
b. Implémentation
Puis, sous iOS, nous allons implémenter cette méthode en appelant la fonction native qui correspond....
MVVM
1. Présentation
L’architecture MVVM (Modèle Vue-Vue Modèle) est l’architecture idéale pour partager du code entre applications cross-plateformes.
Une architecture MVVM est composée de trois parties :
-
Le Model (Modèle) qui correspond aux données que l’on manipule et affiche.
-
La View (Vue) qui correspond à l’interface d’affichage.
-
Le ViewModel (Vue-Modèle) qui sert d’interface entre le modèle et la vue en affichant les données du modèle grâce au Binding et en interprétant les interactions faites depuis la vue.
2. Avantages
Le pattern MVVM est celui mis en avant par Microsoft, mais il comporte de nombreux avantages ne se limitant pas aux applications Windows.
Parmi ces avantages, nous comptons le découpage des responsabilités des différentes couches applicatives, la liaison de données avec la vue ou la possibilité de tester facilement le code contenu dans les ViewModel.
Dans le cadre de Xamarin, cette testabilité est un véritable atout dès lors que nous plaçons un maximum de code commun dans ces ViewModel.
3. Outillage
Comme indiqué dans la présentation du pattern MVVM, celui-ci est parfaitement intégré dans les applications Windows, jusque dans les exemples fournis par Microsoft.
Une des limites à cette intégration est que ce pattern...
Conclusion
Dans le cadre du développement d’une application ciblant plusieurs plateformes, comme cela est très souvent le cas lorsque l’on choisit d’utiliser Xamarin, il est bien entendu fortement recommandé d’utiliser au maximum le partage de code en ayant une structure commune comme nous l’avons vu dans ce chapitre.
Les avantages que cela apporte permettent de développer plus vite et d’avoir une meilleure maintenabilité de son code. Nous vous recommandons fortement de mutualiser au maximum votre code, ce qui peut demander un effort de réflexion supplémentaire lors de la mise en place, et d’utiliser un Framework MVVM sur lequel vous vous sentez à l’aise. Le gain que vous en retirerez plus tard vaudra largement le léger coût que cela engendre lors de sa mise en place.
Dans les prochains chapitres, nous n’utiliserons pas de Framework particulier pour ne pas masquer ce que fait chaque plateforme en détail.