Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

MVVM Light 5 : support de Xamarin !

[new:31/10/2014]Mvvm Light a toujours été ma préférence pour sa simplicité et son efficacité. La V5 apporte son lot de nouveautés parmi lesquelles on trouve enfin le support pour Xamarin !

Une librairie unifiée cross-plateforme

MVVM Light est désormais l’une des deux seules librairies MVVM véritablement portables sous tous les environnements C# :

  • WPF 3.5, 4.0, 4.5 et 4.5.1
  • Silverlight 4 et 5
  • Windows Phone 7.1, 8, 8.1 Silverlight et 8.1 WinRT
  • Windows Store 8 et 8.1
  • Xamarin.Android
  • Xamarin.iOS
  • Xamarin.Forms

 

Il est donc possible d’utiliser la même stratégie, le même code MVVM d’un smartphone Samsung à une tablette Apple en passant Surface, Windows Phone, le Web en vectoriel avec Silverlight et sur PC aussi bien full .NET WPF qu’en mode tablette avec WinRT.

Mvvm Light 5 vs MvvmCross

Les deux approches sont radicalement différentes et MvvmCross reste une de mes options préférées pour le cross-plateforme car cette librairie apporte plus que MVVM comme une syntaxe de Data Binding même sous iOS ou Android.

Toutefois avec l’arrivée des Xamarin.Forms et de composants tiers qui apparaissent pour cet environnement, travailler avec MVVM Light sur les OS mobiles prend plus de sens puisque Xamarin rend possible le binding et qu’on peut se passer de l’aide d’une librairie pour le faire.

Mvvm Light est un framework léger, opérationnel, qui a fait ses preuves. Il reste mon choix par défaut en toute circonstance. La V5 renforce encore plus cette prédilection. Toutefois selon les projets, MvvmCross peut s’avérer plus universel, plus apte à aplanir les difficultés d’un grand écart de type iOS/WPF/Android.

Quant à Prism, la version WPF a toujours été lourde malgré ses innombrables qualités et en revanche la version WinRT me semble trop limitée car exclusivement orientée WinRT.

D’autres frameworks n’ont existé que pour certaines cibles, Jounce par exemple ne tourne que sur Silverlight avec MEF. C’est un framework dont j’ai dit tout le bien que j’en pensais à l’époque, mais il n’est plus d’actualité. Prism pour WinRT est de la même espèce, bien ficelé, bien pensé, mais trop limité à une seule cible dans un monde ou il faut marier les form factors et les plateformes.

Reste donc en course MvvmCross et Mvvm Light V5. Tout dépend du projet, c’est une décision au cas par cas donc, l’un n’efface pas l’autre en tout cas.

Les nouveautés de la V5

Mvvm Light se transforme petit à petit et de nouvelles fonctionnalités apparaissent. Le support de Xamarin n’est pas l’un des moindres on s’en doute, mais il ne faudrait pas que l’arbre cache la forêt.  Par exemple l’ajout d’un service de navigation est un must. Prendre en charge la navigation est un besoin vital dans une application, besoin que Mvvm Light ignorait depuis toujours. De même que le service de dialogue dont seul un début de commencement était géré (via le messenger avec une classe de message spécialisée).

Il s’agit là d’innovations importantes pour ce framework qui était malgré tout très en retrait sur des fonctions aussi vitales.

Dans la foulée la V5 supporte les PCL (Portable Class Library) ce qui permet de mieux l’intégrer dans une logique cross-plateforme avec partage du code au niveau binaire.

Derrière ces nouveautés se cachent d’autres détails. Par exemple les services de dialogue et de navigation sous-tendent la présence d’une Interface qui propose des implémentations pour toutes les plateformes (ou presque puisqu’il n’y a pas d’implémentation WPF fournie pour l’instant mais rien n’interdit de l’implémenter si besoin est).

Le support des Xamarin.Forms fonctionne “out of the box” et c’est une bonne nouvelle aussi car les Xamarin.Forms que je vous ai déjà présentées sont une avancée de taille dont je reparlerai très certainement.

Conclusion

Avec de tels changements il peut y avoir deux ou trois choses à modifier dans un code existant qu’on voudrait mettre à jour en V5, sinon il n’y a aucun problème.

S’agissant d’un travail en perpétuel chantier d’autres améliorations viendront certainement, mais les principales listées ici permettent d’ores et déjà à Mvvm Light de rester le framework MVVM de référence pour tous les développements de taille conventionnelle et d’être une base parfaitement stable pour des applications de grandes tailles.

La grande unification présentée par Microsoft n’est pas forcément celle qu’on croit. La véritable grande unification n’est pas de partager du code entre Windows Phone et Surface mais de pouvoir marier de l’iOS, de l’Android, du WinRT et du WPF avec un même code. Et cette grande unification nous vient de Xamarin et non de Microsoft et de gens comme Laurent qui avec la V5 de Mvvm Light nous offre les outils pour faire face sereinement à un marché décousu et segmenté en plusieurs OS tous incontournables.

Sans Xamarin, sans MvvmCross ou Mvvm Light, nous serions coincés à choisir notre camp et peut-être à tout perdre pour avoir fait le mauvais choix. Avec eux, notre bagage C#/Xaml nous permet d’affronter ce marché distendu et multi-plateforme. Nous avons de la chance d’avoir choisi le bon langage et la bonne plateforme avec .NET … Il sera dur de nous convaincre que seul WinRT est l’avenir car le présent est bien plus complexe que la bonne vieille hégémonie de MS. On a raillé MS pour cette présence sans partage, et comme je l’avais prédit, nous regretterons la stabilité que nous offrait cette hégémonie… Hélas pour notre tranquillité et pour l’éditeur de Redmond malgré la grande qualité des solutions qu’il propose aujourd’hui nous ne pouvons pas tout sacrifier pour le suivre de façon exclusive car nous devons gérer des technologies de plusieurs types en même temps.  J’ai connu un temps lointain où un client choisissait un logiciel et achetait l’ordinateur qui le faisait tourner, aujourd’hui le client choisit la plateforme et veut que le logiciel fonctionne dessus, peu importe ce que cela nous coute…

Microsoft en touchant de gros royalties sur les ventes d’appareil Android et en signant un partenariat avec Xamarin place ses œufs dans tous les paniers à la fois. Que WinRT finissent par être un succès ou que les 85% d’Android finissent par étouffer les Windows Phone et les Surface, Microsoft sera gagnant à tous les coups ! Nous serions bien idiots de ne pas suivre l’exemple qui nous vient de si haut en nous restreignant aux plateformes MS…

Dans notre quête du bonheur Xamarin et la V5 de Mvvm Light nous aident à trouver la petite lumière au bout du tunnel…

Faites des heureux, PARTAGEZ l'article !

Commentaires (17) -

  • Yannick

    14/10/2014 08:13:29 | Répondre

    Hello,

    J'étais très fan de Mvvm Light car simple et concret ...

    Maintenant ça se complqiue fortement et le défaut de Mr. Bugnion est la pauvreté des tutoriaux pour bien utiliser sa bibliothèque !!!

    Après vous dites que c'est cross machin form et tout mais cela ne fonctionne pas sur une Universal App et les PCLs ne fonctionnent plus avec par exemple uniquement un projet WP8.1 et un projet W8.1 ....

    Certe on peut utiliser Mvvm Light dans une Universal App mais on ne peut pas la localiser donc pas d'un grand intérêt ...

    Bref comme d'habitude chez Microsoft ça part out azimute ....

    Et à force c'est décourageant !

    Amitiés

    • Béranger

      15/10/2014 19:04:55 | Répondre

      "Maintenant ça se complqiue fortement et le défaut de Mr. Bugnion est la pauvreté des tutoriaux pour bien utiliser sa bibliothèque !!!"

      Heureusement, cette bibliothèque est plutôt bien utilisée et quelques développeurs comme Olivier Dahan partagent leur connaissances et leurs expériences avec nous (je reconnais ne pas avoir le temps, et surtout le courage d'en faire de même. Mais c'est un exemple que je tenterai d'imiter).

      Nous avons déjà un bel outil mis à notre disposition. Ne tapons pas la main qui nous est tendue. (De tête, on a la possibilité de faire des propositions / remarques à Laurent Bugnion concernant ce projet, à nous d'y prendre part)

      • Olivier

        16/10/2014 06:54:35 | Répondre

        En effet Mvvm Light est très utilisée et on trouve souvent de l'info sur cette lib. On peut aussi éplucher les exemples fournis avec les sources.
        Rien ne vaut l'étude des sources d'une lib pour la comprendre...
        Et puis, c'est vrai, il y a Dot.Blog qui essaye de combler les petites lacunes de doc.
        Mvvm Light a bénéficié de très gros articles, voire de mini livres, qui permettent d'en faire le tour.
        La V5 sera très certainement traitée ici dans les prochaines semaines pour mieux en expliquer les nouveautés.

        Tout n'est pas rose, mais si chacun apporte un peu de ses connaissances à la communauté les choses vont mieux malgré tout.

    • Olivier

      16/10/2014 06:51:20 | Répondre

      C'est bien en cela que je parle encore de MvvmCross qui est véritablement unificateur.

      Toutefois la stratégie de partage de code et le choix des plateformes n'est pas imputable à Mvvm Light pas plus qu'à MS.
      On conçoit aisément que MS force sa propre techno dans les apps universelles. Et là Mvvm Light fonctionne bien.
      Si on choisit d'attaquer un mixe de technos MS et de technos concurrentes, Android ou iOS, il faut convenir que MS ne fournisse pas la colle... MvvmCross est mieux adapté à lisser les différences.

      Mais je pense que pour beaucoup de personne le développement cross-plateforme ne consiste pas à créer une app iOS/Android/WinRT/WP/WPF en même temps... En général on a soit une app Windows Phone / Windows 8-10 ou une app Android/iOS on sait que WP n'est que peu ciblé en réalité.
      Dans tous ces cas Mvvm Light 5 peut être une solution intéressante.

      Il est vrai que les docs de Mvvm Light sont assez minces et peu explicites. Mais comme le fait remarquer ici un autre lecteur, la communauté se partage la tâche, Laurent a créé une lib intéressante, et sur Dot.Blog on peut trouver (et on trouvera pour la V5) des articles qui aident à mieux comprendre la lib.

      Rien n'est parfait en ce monde, pas plus le monde de l'open source que celui du propriétaire. Mais il faut saluer les bénévoles qui nous offre leur travail. S'il fallait compter sur MS uniquement beaucoup de problèmes ne serait pas gérés aisément.

      Mais cela dit je comprend l'agacement devant l'éparpillement de MS qui mes ses oeufs dans tous les paniers à la fois et qui perd un peu de sa fonction de "guide". Mais entre nous MS a toujours agi ainsi. Ce n'est pas le beau paquebot solide et fiable qu'on espérerait piloté par un capitaine aux vues lointaines et assurées ce n'est qu'une entreprise imparfaite qui créée souvent de beaux produits tout autant qu'elle commet des erreurs de communication voire des erreurs tout court...

      On ne reste pas dans le monde MS pour la qualité de la comm ou la fidélité aux annonces. On reste pour la beauté des technos toujours en avance sur les concurrents. C'est un choix pas toujours facile à assumer entre fanboy et hater...

  • Yannick

    16/10/2014 07:57:28 | Répondre

    J'en conviens ...

    Pour revenir sur Mvvm Light, j'ai débuter le dev suivant Mvvm avec ce toolkit qui est super mais dernièrement il y a eu de très gros changement qui font qu'on se perd très vite.

    Après, je le répète il semble qu'on ne puisse pas utilisé Mvvm Light dans une solution Universal App !

    Si on passe par une PCL on ne peut pas viser WP8.1 et W8.1 ....

    Bref c'est un peu le fouilli pour le moment

    • Olivier

      25/10/2014 02:50:03 | Répondre

      c'est forcément le fouilli puisque c'est de la navigation à vue...
      N'oublions pas que depuis quelques années systématiquement les plans prévus par MS foirent de Vista à Windows 8 en passant par Windows Phone 7, on ne peut pas dire que ça se passe comme prévu...
      Donc on a le droit à un slalom géant avec un petit plus : au ski les portes sont tracées avant la course, avec MS on pose les portes au fur et à mesure que le skieur avance sur la piste...

  • jerome

    17/10/2014 10:43:42 | Répondre

    Il y a un bon cours sur Mvvm Light de L. Bugnion sur Pluralsight.

    • Olivier

      25/10/2014 02:51:08 | Répondre

      oui c'est assez bien fait. Mais je ne sais plus si ce cours est gratuit ou payant.

  • Yannick

    22/10/2014 14:38:32 | Répondre

    Oui,

    mais c'est payant et vu que les précédents tutos de L. Bugnion sont pas très explicites et orienté pédagoqie ....

    • Olivier

      25/10/2014 02:52:09 | Répondre

      je me doutais bien que c'était payant...
      Laurent est un bon dev mais pas un pédagogue hors pair c'est vrai. Manque de temps peut être.

  • Yannick

    27/10/2014 06:56:06 | Répondre

    C'est clair que son ToolKit est génial et donc qu'l est très bon mais c'es certe pas un aussi bon pédagogue Smile

    Bon on ne peut pas tout avoir ....

  • Ju

    04/11/2014 18:00:34 | Répondre

    Bonjour Olivier,

    Tout d'abord merci pour la qualités des articles!

    Que penses-tu de reactiveui: https://github.com/reactiveui/reactiveui

    Ils supportent ces plateformes:
    •Xamarin.iOS
    •Xamarin.Android
    •Xamarin.Mac
    •WPF
    •Windows Forms
    •Windows Phone 8
    •Windows Store Apps

    • Olivier

      04/11/2014 23:10:45 | Répondre

      C'est une librairie qui a l'air très intéressante mais hélas à chaque fois que j'ai eu envie de m'y intéressé j'ai galéré sur internet pour trouver des articles, ne serait ce qu'une présentation et je n'ai jamais rien pu obtenir d'utilisable (si, un slide en russe, j'exagère donc...).

      Bref c'est certainement génial mais faute de documentation et d'articles intelligibles je serai bien en mal de donner mon avis !

      Si toi ou quelqu'un d'autre connaissez des liens je suis preneur ... Smile

  • Gregory

    13/11/2014 11:54:47 | Répondre

    Bonjour a tous,

    J'ai cherché et testé de nombreux framework MVVM, dont ReactiveUI. L'approche est intéressante mais j'avais fais un petit log pour testé différente méthode de binding et reactiveUI arrivai loin derrière.

    Cela remonte à Juin dernier.

    Olivier, si tu ne devait retenir qu'un seul Framework pour une TPE, afin de ne pas éparpiller les compétences et les dépendances, lequel retiendrais tu?

    Sachant que WPF est la cible de prédilection, il reste un historique silverligth mais je doute que de nouveau développement reparte dessus (au profit de ASP probablement) et surtout une migration vers le mobile via le cross plateforme.

    • Olivier

      13/11/2014 15:28:34 | Répondre

      Rien n'est simple car avec les dernières annonces de MS, .NET en open source, rapprochement plus fort avec Xamarin, un émulateur MS pour Android, etc... Une chose est sûre c'est comme je me tue à le dire depuis deux ans au moins on va vers le cross-plateforme. C'est déjà une certitude.
      Ensuite techniquement comment ça va se passer MS pour Mac, iOS et Android ? On sait que la partie Mono sera soutenue par MS, et que pour iOS c'est avec Xamarin. Mais il semble que MS va sortir un Mono pour Mac de son côté.
      Comment tout cela va t il marcher ensemble ?

      Pour répondre à ta question il y a à mon sens deux frameworks à prendre en considération : MVVM Light car il est simple et efficace et portable. Ou MvvmCross car il est plus sophistiqué et qu'il couvre WPF autant que les mobiles.

      Prism pour WPF se limite à WPF, à éviter. Prism pour Windows Store, se limite à Windows Store, donc à éviter. Caliburn a toujours été trop complexe et trop mystique. Jounce ne marchait que sur Silverlight avec MEF, etc...
      Une fois qu'on a fait le tour de la question, reste Mvvm Light et MvvmCross.

      Pour un projet cross-plateforme je conseillerai MvvmCross car on peut réellement avec un code commun. Mvvm Light est portable mais n'assure pas la cohérence d'un code unique.

      Rien n'est facile... mais pour Mvvm Cross il ne faut pas oublier mes 12 vidéos sur Youtube, ça peut aider à prendre la chose en main !

  • Gregory

    18/11/2014 07:00:16 | Répondre

    Merci Olivier,
    Ce n'est pas faux, les videos que tu as faites sur mvvmcross sont un plus indéniables.

    J'ai regardé les 2 premières et elle sont excellentes.

    Je vais toutes les visionner histoires de me familiariser avec ce framework, mais en effet il semble répondre a beaucoup d'exigence et permet d'envisager l'avenir avec plus de sérénité.

  • Gregory

    10/12/2014 11:23:45 | Répondre

    Bon cela fait un petit moment que joue avec tout ce petit monde et j'en vient a me poser des question sur l'avenir de MvvmCross.

    Aujourd'hui on peut considérer 2 Type d'application Desktop ou mobile.

    Pour le desktop je retiens WPF qui couvre la majorité des besoins.
    Pour le mobile IOS/Android et Windows phone dans une moindre mesure.

    MvvmCross promet de centraliser tout au maximum (jusqu'au viewmodel) mais qu'en est-il dans les faits ? Je ne me vois pas proposer les mêmes fonctionnalités entre mon application WPF et Mobiles, loin de là. Mon application actuelle desktop fait des charts en centaines de milliers de point, Multi fenêtres, ribbon, ..., rien de tout ça sur phone ou tablettes bien entendu.

    Pour le mobile, j'ai pas mal essayé les Xamarin forms qui sont proches de ce que je pouvais espérer de mieux à quelques détails prêt. Mais MvvmCross n'a pas sa place ici, en tout cas je ne vois pas ou le mettre.

    Pour finir je vois 2 chemins se dessiner  :
      WPF d’un côté et là on fait avec les outils de son choix (MvvmLight, MvvmCross, …, ou Framework perso)
      Mobile avec Xamarin Forms et du coup on n’a pas vraiment besoin de Framework tiers. Si par contre un complément via Xamarin ancienne méthode était nécessaire alors peut-être l’utilisation de MvvmCross aurait su sens.

    Je suis preneur de tout type de réflexions sur le sujet car nous sommes en pleine migration et tout raisonnement est bon à prendre.

Ajouter un commentaire