La Portable Class Library (PCL)
La portable Class library (PCL) va nous permettre de mutualiser une grande partie du code à travers projets.
Il est possible depuis quelques années de partager du code PCL entre différents projets (Sliverlight, WPF, Windows Phone, Windows 8,…).
Plus les projets sont différents, plus le nombre de classes mutualisées diminue.
Il est important de voir que cette Library ne pourra être utilisée que pour des projets compatibles avec les options choisies.
A noter également que les versions Express de visual studio ne permettent pas de créer une PCL, mais accepte en revanche leur utilisation dans un projet.
Cette Library ne pourra pas non plus utiliser une library qui n’aurait pas à minima les mêmes options sélectionnées.
Exemple d’un projet Windows 8 et windows Phone.
Pour simplifier notre problématique nous allons parler uniquement des 2 plateformes Windows 8 et Windows Phone. Dans cet exemple nous souhaitons mutualiser le code entre ces multiples plateformes (Windows Phone 7, 8, 8.1, Windows 8,…).
Dans une première approche, un projet utilisant une PCL qui voudrait cibler tous les devices pourrait être découpé de cette façon
Que peut-on mutualiser ?
- Les objets (model) et les view-models (dans un projet architecturé en M-V-VM)
- Les accès aux données
- La partie navigation utilisée dans le MVVM
- Les ressources de type string! Très utiles dans les projets multilingues!
Le retour d’expérience sur un projet de ce type est le suivant. Les pourcentages indiqués représentent la quantité de travail fourni.
Mutualisons encore un peu plus !
Entre plusieurs projets, beaucoup d’éléments se répètent : La gestion d’image en cache, le système de navigation, des boites de dialogues, la connexion http / Json, la boîte de dialogue A Propos, …
Au fur et à mesure de mes développements j’ai constitué une bibliothèque commune entre mes projets et qui s’enrichie à chaque nouveau projet. Cette bibliothèque permet d’éviter de réécrire du code déjà écrit mais surtout fiabilise le nouveau projet avec l’utilisation de code éprouvé.
La PCL Partagée en haut possède également les implémentations pour les plateformes Windows et Windows Phone
Voici par exemple la structure de 2 de mes projets : le projet Snowtify et le projet Armada (WP).
BratchedTools dans chacun de ces projets correspond à la bibliothèque mutualisée.
En mutualisant le code entre projets et entre les différentes plateformes, vous pouvez ainsi espérer réduire le temps de votre nouveau développement d’environ 40% ! et la migration vers une autre plateforme ne vous coutera que 30% supplémentaires.
Les Universals Apps, introduit avec Windows Phone 8.1 vont aller encore plus loin en nous proposant de partager l’interface entre Windows 8 et Windows Phone…