Partager du code entre plate-formes grâce à la Portable Class Library (1/4)

 

 

Partager du code entre plate-formes grâce à la Portable Class Library (1/4)

  • Comments 1

Avec la multiplication des plate-formes, les besoins en terme de partage de code sont de plus en plus importants. L’arrivée de Windows 8 et les applications Metro va générer beaucoup de portage d’applications existantes et la réutilisation du code devient alors capitale. Le sujet est assez complexe puisque les frameworks ne sont pas équivalents sur les différentes plateformes mais conservent malgré tout un sous-ensemble commun.

Le type de projet « Portable Library » permet justement de factoriser du code commun à plusieurs plateformes en donnant accès uniquement aux assemblies de base communes à celles-ci. On met tout le code commun dans cette librarie de classes qui est référencée par les projets spécifiques à chaque plate-forme et hop le tour est joué.

Rhhha mais c’est génial ça ! Ca va me sauver la vie ? Oui et non…

On sous-estime souvent les spécificités de la plateforme dans notre code et nous verrons qu’il peut être plus compliqué que prévu de conserver un code commun, au fil des 4 articles de la série:

- Partager du code entre plate-formes grâce à la Portable Library (1/4)

- Partager du code entre plate-formes : l’application Windows 8 Metro (2/4)

- Partager du code entre plate-formes : l’application Windows Phone (3/4)

- Partager du code entre plate-formes : l’application Silverlight 5 (4/4)

Retrouvez le code source des démos:

[Edit 31/05/2012] Le sujet du portage d’application depuis Windows Phone vers Windows 8 (et donc indirectement du partage de code entre plates-formes) a aussi été traité de manière très détaillée par Pierre Cauchois dans sa suite d’articles Stratégies et techniques de partage de code C# et XAML entre Windows Phone et Windows 8

 

La Portable Class Library

La Portable Class Library existe déjà pour Visual Studio 2010 sous forme d’extension. Visual Studio 11 Ultimate intègre directement une version de la Portable Library supportant les applications Windows 8 Metro.

Pour l’utiliser, il faut créer un nouveau projet de type « Portable Class Library ».

image_thumb4

Dans les propriétés du projet, vous pourrez choisir les plateformes sur lesquelles votre application doit pouvoir tourner.

image_thumb71

image_thumb10

En fonction des plateformes et des versions de plateformes sélectionnées, Visual Studio vous donnera accès aux librairies de base qui leur sont communes. Ainsi, plus vous sélectionnez de plate-formes, plus ce sous-ensemble sera restreint.

Voici un tableau qui détaille les fonctionnalités disponibles dans la Portable Library, sur les différentes plateformes :

image

Que peut-on mettre en commun dans un projet ?

Classiquement, on va retrouver

    • Les mêmes données
    • L’accès aux mêmes services côté serveur
    • Le même métier
    • Certains cas d’utilisation identiques

Les pages, le layout ainsi que cetains cas d’utilisation seront différents car les dimensions et l’usage de chaque device diffère :

    • Usage du touch contre clavier/souris
    • Grand écran/petit écran
    • Device nomade/fixe

L’idéal serait de partir vers une structure de ce type avec les couches communes en bleu :

image_thumb7

En terme de structure de projets dans Visual Studio, on procéderait de la manière suivante avec un projet par plate-forme et un projet commun de type Portable Library:

clip_image012_thumb

Et les couches relatives (DAL/Model/ViewModel) seraient associées à des répertoires sur chaque plate-forme comme sur le schéma ci-dessus :

clip_image014_thumb2

Pas si vite…

Malheureusement, la couche d’accès aux données (DAL) contient souvent du code spécifique à la plate-forme. Par-exemple, l’accès à un service OData nécessite un client WCF Data Service différent sur WP7, sur Silverlight et sur Win8 (où il n’existe pas encore), bien que le service soit le même côté serveur.

Dans ce cas, la DAL pourrait se retrouver dans la portable library sous la forme d’une interface, qui serait implémentée de manière différente sur chaque plate-forme:

clip_image016_thumb

namespace MyApp.Portable.DAL
{
    public interface IDataProvider
    {
        event EventHandler<IEnumerable<DataItem>> DataLoaded;
        void LoadDataAsync();

        void UpdateItem(DataItem item);
        void AddItem(DataItem item);
        void RemoveItem(DataItem item);
    }
}

 

Comme on peut le voir dans le tableau plus haut, MEF est disponible pour certaines plate-formes dans la Portable Lib et peut donc nous aider à faire une gestion propre des règles d’implémentation.

 

Autre problématique: à ce jour les projets Windows Phone sont développés avec Visual Studio 2010 et il faudra donc 2 solutions : l’une sur VS2010 avec le projet Windows Phone, l’autre sur VS11 avec le projet Win8 Metro et Silverlight. La librairie commune – créée dans VS11 pour choisir la plate-forme Win8 - se retrouvera dans les 2 solutions.

Il est néanmoins possible d’utiliser la Portable Class Library dès aujourd’hui, ce qui peut être intéressant si vous souhaitez conserver une structure commune et surtout pouvoir assurer une maintenance homogène de votre application sur les différentes plate-formes.

 

Démonstration

Je vais partir sur une application toute simple qui récupère des données depuis un service OData et les affiche à l’écran. Le but est de montrer comment réutiliser du code dans ce contexte et il faut extrapoler ce principe pour une application plus conséquente, sinon cela n’a pas vraiment d’intérêt car très peu de code sera finalement partagé dans mon exemple.

 

Pré-requis

 

Présentation de l’application

L’application démo va présenter une liste de vins avec leurs photos. Je récupère ces données depuis un service OData qui se trouve à cette adresse : http://caveavins.cloudapp.net/CaveAVinsDataService.svc/Wines et je les affiche à l’écran.

Pour la démo je mettrai en oeuvre l’application sur 3 plate-formes:

- Windows 8

image

- Windows Phone

image

- Silverlight 5 avec Pivot viewer

image_thumb[6] 

image_thumb[7]

Je vais donc créer 2 solutions : l’une sous Visual Studio 11 beta qui contiendra 3 projets:

- La portable lib

- L’application Windows 8 Metro

- L’application Silverlight 5

L’autre sous Visual Studio 2010 qui contiendra 2 projets:

- La portable lib

- L’application Windows Phone

 

Voici le code source complet des applications:

 

 

La suite : Partager du code entre plate-formes : l’application Windows 8 Metro (2/4)

Leave a Comment
  • Please add 2 and 1 and type the answer here:
  • Post
  • Hello,

    Ces articles correspondent tout à fait à ce que je cherche à faire !!!

    Donc un grand merci ;)

    J'aurais une question concernant la PCL. Je réfléchis à mettre des ressources qui sont communes aux X applications comme les traductions (Via fichier resources) et j'ai aussi des images comme des drapeaux de pays.

    Je suis parti sur des ressources embarquées mais je ne sais pas trop comment y accéder (Surtout les images) et je me demande si c'est une bonne pratique ?

    Pourriez-vous m'aiguiller sur ce sujet ?

    Merci

Page 1 of 1 (1 items)
Page 1 of 4 (87 items) 1234