[new:30/08/2014]Le framework MVVM Light dont j’ai parlé ici de multiple fois pour ses qualités et sa simplicité a enfin sauté le pas il y a quelques temps : il devient cross-plateforme en supportant Xamarin !
MVVM Light un habitué des colonnes de Dot.Blog
MVVM Light de Laurent Bugnion est un produit dont je vous ai parlé cent fois et sur lequel j’écris des tonnes d’articles et un même un mini livre…
Simple et puissant mais limité à Windows…
J’ai toujours aimé ce framework car il est simple à prendre en main et en fait assez pour assurer le respect de MVVM. Sa simplicité est garante de son apprentissabilité ce qui me parait essentiel lorsque je le conseille à des clients dont les équipes sont hétérogènes ou fluctuantes. D’autres approches m’ont semblé dans le temps plus intéressantes comme Jounce qui ne fonctionnait qu’avec Silverlight et utilisait MEF. Mais Jounce n’a jamais été porté sur WPF ou Windows Phone.
Prism est bien entendu un fabuleux framework mais le mot même “MVVM” n’est arrivé que fort tard dans les dernières versions et même si son esprit à toujours été proche de MVVM on voyait bien que sa complexité n’avait pas respecté l’esprit de MVVM. Heureusement la dernière version pour WPF ainsi que la version spéciale pour WinRT se sont attachées à respecter plus directement MVVM. Prism est un donc bon framework aujourd’hui mais il n’est pas portable.
La complexité ce fut le cas de Caliburn aussi. Tellement imbuvable que son créateur a même du créer Caliburn.Micro, qui finalement est présenté comme le remplaçant de la version non micro… Dans cette dernière forme Caliburn, micro donc, est un bon framework bourré de choses intelligentes. Mais cela reste un esprit bien particulier. Certains aimeront et ils auront finalement raison. Il faut toujours utiliser ce qu’on aime, on travaille mieux comme ça.
Donc pour une majorité de mes projets sous Silverlight ou WPF j’ai souvent opté pour MVVM Light.
Depuis deux ans environs quelque chose me gênait de plus en plus avec ce framework : son enfermement. Bien sur il y a eu l’intégration du support de WinRT, mais finalement ce n’était pas si compliqué à faire. Il y eut des améliorations comme l’utilisation d’un moteur d’injection de dépendance. Tout cela faisait partie des évolutions qu’on pouvait attendre d’une si bonne librairie.
Mais elle restait confinée à Windows alors que le monde s’ouvrait de plus en plus à d’autres OS obligeant à travailler en cross-plateforme…
Le cross-plateforme… 12 vidéos gratuites, un livre PDF gratuit, des tas de billets… Vous vous imaginez bien qu’on ne fait pas tout ça juste pour remplir du texte sur un blog, il y a un sens, une vraie motivation derrière, et cette motivation, en dehors de la passion, c’est la réalité du marché !
Poussé par cette dernière j’ai fini par rencontrer un produit exceptionnel, MvvmCross dont j’ai aussi parlé énormément avec beaucoup de détail puisque c’est lui qui est utilisé dans les 12 vidéos évoquées plus haut.
Ca c’était avant… Maintenant c’est aussi portable !
De la concurrence née l’émulation et la stimulation. Et MvvmCross ne pouvait rester seul au royaume du code portable.
Poussé par la même réalité et pas ses utilisateurs Laurent a fini par réagir, et c’est ainsi que la version 4.4 de MVVM Light nous a offert enfin le support de Xamarin.
Depuis cette version qui est appelée à s’améliorer d’ailleurs, MVVM Light offre le support de Xamarin, c’est à dire de iOS et de Android.
Enfin pas tout à fait… Car pour iOS il faudra attendre un peu. Ce n’est pas encore totalement stable mais ça arrive. Laurent montre même sur son site comment utiliser Mvvm Light sur iOS avec les Xamarin.Forms…
Dans quel esprit ?
Bon, je vais être franc, l’approche de MvvmCross est plus subtile, plus complète aussi. Pour l’instant MVVM Light se propose de vous laisser écrire vos ViewModel comme avant et d’utiliser le code des Activity Android pour y ajouter les bindings (par code avec AddBinding()) et les commandes (avec AddCommand()).
C’est un peu comme utiliser le code-behind sous XAML, c’est dommage de ne pas être allé aussi loin que MvvmCross en proposant un binding dans le XML Android.
Que faut-il en penser ?
Pour l’instant je dirais que le cross-plateforme de MVVM Light est implémenté “a minima”. C’est du MVVM Light accommodé pour supporter Xamarin.Android. C’est bien, c’est intéressant et pour des projets qui existent déjà et qui font utilisation de MVVM Light c’est plutôt une bonne nouvelle : pas besoin de remettre en question l’existant pour ajouter un projet Android à la solution…
vs MvvmCross ?
En dehors de cela les peintures sont un peu trop fraiches et elles ont été posées sur un mur mal poncé. Intéressant, salvateur pour certains, MVVM Light 4.4+ est toujours un excellent framework MVVM pour WinRT, Windows Phone, WPF. Il supporte Xamarin.Android de façon un peu rustique mais il le fait ce qui est un avantage certain. Et je suis convaincu que Laurent saura faire évoluer la bibliothèque, le plus dur était de franchir le pas du cross-plateforme. Avec un peu de délai et pas encore de façon éclatante, mais c’est fait !
Quant est-il réellement par rapport à MvvmCross ?
C’est encore le jour et la nuit… Il faudra beaucoup de travail sur MVVM Light pour le faire arriver au niveau d’intégration et de souplesse que possède MvvmCross. Notion de plugins cross-plateformes, ajout de plusieurs formes de bindings directement dans les UI Android, approche plus originale sachant restée simple, etc.
Aujourd’hui le match est toujours gagné par MvvmCross.
Mais il faut saluer l’arrivée de MVVM Light dans ce petit monde du cross-plateforme…
Conclusion
Mvvm Light est utilisable directement dans vos applications via les packages Nuget, vous pouvez aussi obtenir le source sur CodePlex.
Le plus intéressant dans tout cela c’est que bien entendu vous avez là la confirmation de ce que je me tue à vous dire depuis au moins deux ans : l’avenir est au cross-plateforme et il sera impossible d’y échapper.
Le rapprochement Microsoft / Xamarin, l’existence de MvvmCross, puis maintenant de MVVM Light portable, tout cela doit vous inciter à comprendre que l’avenir est forcément éclaté. Faire le dos rond pour que “ça passe” a eut son temps. Aujourd’hui le monde se sépare au minimum en deux OS essentiels : Windows d’un côté pour les entreprises et les grosses applications (ni Google ni Apple ne peuvent avancer le moindre pion dans cet univers malgré le récent accord Apple/IBM) et Android pour toutes les machines mobiles (Apple n’y étant plus que quantité négligeable les d’applications business).
Ceux qui me suivent et qui écoutent mes conseils ne seront pas surpris par ce mouvement inexorable que j’annonce et explique depuis un long moment. Ceux qui prennent un peu le train en marche ou qui restaient sceptiques doivent aujourd’hui se rendre à l’évidence : il est grand temps de se mettre à Xamarin et à Android en complément de ce qu’on sait déjà du monde Windows.
Non pas pour supplanté ce dernier, non pas pour défier Microsoft, mais simplement pour embrasser la réalité de notre monde qui est, qu’on l’accepte ou non, cross-plateforme Windows / Android et ce pour des années et des années à venir…
Saluons le travail des loups solitaires comme Stuart Lodge et Laurent Bugnion, saluons aussi la grande intelligence d’un de Icaza qui offre désormais la portabilité iOS/Android/Windows Phone dans Xamarin. Tous ces gens ont le sens de la réalité, le feeling de ce que sera demain, c’est grâce à leur travail que nous pouvons avancer. Ce sont les premiers de cordée… Sans eux l’escalade ne se ferait pas. Tout simplement.
MVVM Light 4.x est encore un peu jeune, laissons-lui le temps de murir, mais c’est forcément un sujet sur lequel je reviendrai bientôt !
Stay Tuned !