Développement d’applications sur Windows Phone 7

L’année dernière, pendant mon année d’alternance, j’ai travaillé sur la plateforme Windows Phone 7. Je vais essayer de partager avec vous mon expérience sur cette plateforme mobile qui reste un peu méconnue du grand public, tout en essayant d’avoir un esprit critique sur le sujet.

Dès mon arrivée en septembre 2010, j ‘ai eu la chance  de manipuler des terminaux qui n’étaient pas encore commercialisés (date officielle de sortie : le 21 octobre 2010). Voici les réactions immédiates qui me sont venues concernant le hardware. Côté design rien d’impressionnant,   les téléphones sont assez sobres mais ce qui m’a surpris ce sont les performances : une rapidité d’exécution pouvant faire pâlir certains de ses concurrents et des écrans de très bonne qualité. La gamme des téléphones est assez homogène (caractéristiques techniques moyennes : processeur 1Ghz, 512MB de RAM, capacité entre 8 et 16Go, écran 800x480pixels, APN 5mégapixels avec Flash).

Au niveau de l’OS, le premier démarrage donne vite un brin de déception : on trouve un premier bureau avec les applications épinglées (grosses icônes carrées) et un autre avec « une grosse liste horizontale de toutes les applications », autant dire qu’il ne faut pas avoir peur de slider lorsqu’on a une grosse liste d’applications… On retrouve donc une interface Metro assez basique et on se rend vite compte que, mis à part la couleur des icônes et l’épinglage d’applications, rien n’est modifiable. En ce qui concerne les applications natives, on retrouve les classiques  (« Téléphone», « Contacts », « Photos », « Musiques + Vidéos », « Internet Explorer 8 » et « Jeux » qui correspond au Xbox Live),  la suite Microsoft Office Mobile et le moteur de recherche Bing accessible à tout moment (grâce à la touche recherche). Enfin, on a le Windows Phone MarketPlace, sur lequel, j’ai pu me rendre compte tout au long de l’année, qu’on retrouve petit à petit les grands classiques des autres markets (pour n’en citer aucun).

Maintenant, que le tour de l’utilisateur lambda est fait, passons à la partie un peu plus technique.

Le développement d’application WP7 repose sur une version de Silverlight « adaptée ». En plus du framework traditionnel, on trouvera toutes les APIS spécifiques aux SmartPhones : accéléromètre,  géolocalisation, caméra, tâches : téléphoner, envoyer un message, lancer le marketplace, et d’autres encore. On trouve aussi les 2 modes de navigation propres aux applications WP7 que sont le panorama et le pivot ; dans le cadre de mon projet l’accent était mis sur l’utilisation du panorama pour garder l’authenticité de WP7 et ne pas essayer de copier la navigation par onglets des autres plateformes mobiles. Toutefois, on observe une certaine amputation au niveau des composants classiques qui composent Silverlight et celle-ci s’avère vite handicapante.

Qui dit Silverlight, dit pattern MVVM (Model View ViewModel)… Ces deux notions étaient pour moi totalement inconnues et mes premiers pas furent hésitants, mais une fois les grands principes compris, on devient très vite adepte du concept.  Pour faire simple, et sans rentrer dans les détails voici un petit schéma  qui explique le pattern:

MVVM est basé sur le principe de « Databinding » qui permet de synchroniser une propriété du ViewModel avec une propriété d’un composant graphique de la View (y compris les événements : click, changement de sélection,…).  Cette technique devient très vite appréciable : code minimal, rafraichissement  automatique  dans les 2 sens entre la View et ViewModel.

De plus, du fait de sa faible dépendance entre les interfaces graphiques et le code métier, MVVM facilite les tests de code et la séparation des taches des développeurs et des designers. J’en profite pour faire un petit point sur les outils mis à disposition. Tout d’abord, on trouve l’incontournable IDE pour les technologies Microsoft, Visual Studio auquel est associé le Windows Phone Developer Tools (SDKs + Emulateur). Pour moi, l’environnement s’est avéré être très complet : parmi les choses appréciables, on trouve un petit éditeur d’interfaces graphiques, le déploiement sur l’émulateur ou sur un device, un débuggeur pas à pas (dans les 2 cas de déploiement). Il est possible d’effectuer tout le développement dans Visual Studio, toutefois, dans le cadre d’un projet où un designer a un rôle à part entière à jouer, il peut utiliser l’outil Microsoft Expression Blend pour créer les interfaces graphiques sans se soucier du code métier qui tournera derrière. Pour ma part, je pense que Blend est un « jouet de luxe » et qu’on peut rapidement s’en passer.

Voici un petite liste des concepts que j’ai pu utiliser et qu’il est judicieux d’évoquer :

  • L’ IsolatedStorage est un espace de stockage de données propres à chaque application et qui est abstrait du reste de système de fichiers et facile d’utilisation.
  • L’application possède plusieurs points d’entrées (launched ou actived) et de sorties (closed et deactivated) dans lequel on peut faire des traitements différents selon que l’utilisateur ferme ou mette en background l’application. On trouve aussi  une méthode Application_UnhandledException qui permet d’effectuer des actions importantes (sauvegarde du contexte par exemple) avant que l’application se ferme dans le cas d’une exception non traitée (donc crash) et cela s’avère très utile.
  • Dans l’attente de la gestion du multitâches, le développeur doit gérer la sauvegarde du contexte de l’application lors de sa « mise en background » et le rétablissement de ce contexte lors de la réactivation de l’application. Ce procédé appelé le tomstoning est assez fastidieux puisqu’il faut sauvegarder unitairement toutes les données nécessaires, mais il est toutefois inévitable dès lors que l’application possède des données persistantes. Dans le cadre de mon projet, c’était un point essentiel à respecter et une grande partie des tests y était consacrée.

Avec tout cela, on peut donc réaliser des applications avec des interfaces graphiques très riches sans produire beaucoup de code car le pattern MVVM très puissant quand on a compris les bonnes pratiques. J’ai pu aussi m’appuyer sur un MSDN très complet et plutôt bien présenté.

Pour moi, le principal aspect négatif est que le framework manque parfois de composants graphiques ou de propriétés dans les composants existants. Cela a entraîné que j’ai vite eu le besoin de créer des composants « custom ». Un des autres faits est que la plateforme manque encore de contributeurs. J’ai été confronté à quelques problèmes techniques qui n’ont pas trouvé de réponse sur les forums appropriés.  Enfin, j’ai pu constater qu’on obtenait vite de mauvaises performances  si l’application est mal architecturée ou si on ne se soucie pas de décharger un maximum le thread principal.

Après une  expérience de 3 mois sur un projet WPF et un peu de recul, le MVVM que j’ai pratiqué sur WP7 n’était pas optimal (trop de code behind). Il s’avère que, à l’heure actuelle, le framework Silverlight pour WP7 n’est pas complet pour pratiquer un bon MVVM et que si l’on souhaite mettre en place une vraie architecture MVVM, il faut utiliser l’outil MVVM Light Toolkit et complexifier un peu son code.

En conclusion, et pour donner un avis tout à fait personnel, le développement d’applications sur Windows Phone 7 s’appuie sur de bonnes bases (Silverlight pour des interfaces interactives riches, MVVM pattern, environnement de développement complet et pratique),  mais laisse rapidement transparaitre une grosse lacune : le framework WP7 n’est pas assez riche par rapport à ces aînés (Silverlight et .NET). Beaucoup de personnes pourront vite être repoussé par l’étiquette Microsoft, mais pour moi, le développement d’applications sur WP7 est aussi intéressant que le développement sous Android (pour avoir pratiquer les 2). Microsoft doit toutefois, selon moi,  enrichir son framework et l’interface de son OS car elle présente un excès de sobriété.

Nouvelles versions

  • Actuellement, on trouve la version de l’OS 7.5 « Mango » : Multitâches complet, IE9, copier-coller, … et la version 7.1 du SDK Windows Phone.
  • A venir, l’OS nom de code « Tango » (date inconnue) avec certainement un nouveau SDK.

Les liens utiles

White : un framework de test intéressant ?

Pour situer le contexte, je réitère l’animation d’un séminaire à l’Université de Savoie sur le même thème que l’an passé : les tests automatisés et l’intégration continue. L’intervention aura lieu le 18 novembre prochain. Je suis donc en pleine phase de revue des différents framewoks de test abordés.

Ma bête noire c’est le test automatisé d’une application de type client lourd, écrite en Winforms, WPF ou plus léger Silverlight. Les solutions open source (et gratuites) sont soit inexistantes soit très pauvres.

Pour peut-être enfin répondre à ce besoin, je regarde actuellement le framework white qui me semble très prometteur: white encapsule la couche UI Automation, l’API d’accessibilité de Microsoft. Quelle que soit la technologie utilisée, on pourrait partir du principe qu’une application accessible est une application testable !

Les premiers tests sur une application école Winform sont assez concluants. Le prochain objectif est clairement d’éprouver cette solution sur une application grandeur nature.

Tech Days 2009 (suite)

Ayant également eu le plaisir de participer aux Tech Days 2009, je vous présente quelques éléments en complément de ceux apportés par Jean-François :

Sync Services for ADO.NET

Tout d’abord une petite précision sur le vocabulaire employé, car la confusion peut vite gagner. Microsoft Sync Framework (MSF) est la plateforme Microsoft de synchronisation permettant la collaboration et le travail en mode déconnecté pour les applications, services et périphériques. Plusieurs fournisseurs de synchronisation (providers) permettent de manipuler ce framework :

  • Sync Services for ADO.NET : Permet la synchronisation de sources de données ADO.NET
  • Sync Services for File Systems : Permet la synchronisation de systèmes de fichiers et dossiers
  • Sync Services for SSE : Permet la synchronisation d’extensions comme RSS ou encore ATOM

La session à laquelle j’ai participé présentait exclusivement le fournisseur Sync Services for ADO.NET. Nous avons pu voir comment élaborer simplement une application permettant de travailler sur une base client en déconnecté à partir d’un laptop et d’un PDA. Au programme : synchronisation des bases, change tracking et résolution des conflits. Je dois bien avouer que l’API et les assistants de Visual Studio permettent d’effectuer toutes ces tâches très simplement !

Pour clore cette session, nous avons même eu droit à une démonstration de la même solution sur un PDA en Java, renforçant ainsi la volonté affichée de Microsoft en matière d’interopérabilité.

WPF et Silverlight 2

Nouveaux fleurons de Microsoft pour le développement d’interfaces utilisateurs riches, les technologies Windows Presentation Foundation (WPF) et Silverlight 2 ont eu, comme nous pouvions nous y attendre, la part belle au cours de ces trois jours.

Comme le disait Jean-François et malgré le discours officiel il semble bien que Microsoft souhaite voir WPF succéder aux Winforms. Aussi, la plupart  des démonstrations mettant en jeu une interface graphique ont été réalisées en WPF.

Côté mise eu œuvre, plusieurs sessions traitaient des bonnes pratiques pour la réalisation d’un projet avec ces technologies. De ce côté-là, rien de bien nouveau. Les préconisations sont d’utiliser des design patterns d’interface utilisateur tels que M-V-C, M-V-P et, celui qui est à priori le plus approprié : M-V-VM (Model-View-ViewModel). Ces modèles permettent entre autre de faciliter ce qui constitue la deuxième préconisation : faire des tests !

Donc vous l’aurez compris, l’objectif était surtout de convaincre les frileux et les indécis de franchir le cap du XAML.

C# et LINQ avancé (Geek inside)

Pour terminer, une session que j’ai particulièrement appréciée sur la programmation avancée avec C# et LINQ. Elle était animée par Mitsuru Furuta, une référence dans le monde Microsoft. Au programme : LINQ, generics, inférence de type et expression lambda. L’objectif était de mettre en œuvre efficacement ces concepts au travers de trois exemples utiles. Pour plus d’information, je vous renvoie à son blog où vous pourrez consulter deux de ces exemples :