Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Prism pour Xamarin.Forms – Partie 1

Dans un article de septembre 2016 je vous présentais le premier portage de Prism pour les Xamarin.Forms mais j’ai préféré attendre plus de maturité des uns et des autres pour vous en parler plus en détail. C’est parti !

PRISM

C’est une librairie, un toolkit, un framework, appelez cela comme vous préférez, destiné originellement au support de MVC pour WPF. Assez vite MVVM est le pattern MVC adapté à XAML qui s’est imposé et PRISM est devenu une librairie MVVM comme de nombreuses autres telles MvvmLight ou Caliburn.

J’ai, comme je le disais en introduction, déjà présenté de très loin PRISM pour Xamarin.Forms. Mais je n’étais pas allé dans les détails. Toutefois PRISM n’est pas une nouveauté dans les colonnes de Dot.Blog ! Il doit y avoir au moins une douzaine d’article qui sont consacrés à cette librairie. Notamment une série de 5 ou 6 articles sur PRISM pour WinRT à la conception duquel j’avais participé. On retrouve aussi la présentation de la version 2 pour WPF et Silverlight ce qui ne nous rajeunit pas ! Bref si vous cherchez un peu sur Dot.Blog vous trouverez des articles qui au fil des années retracent la vie de PRISM (cliquez ici pour une recherche sur le mot PRISM).

J’invite donc le lecteur à parcourir ces différents papiers s’il s’intéresse à l’évolution de cette librairie MVVM.

Les différentes versions

PRISM est une librairie ancienne qui a connu de nombreuses évolutions et même des changements radicaux qui font que seul le nom subsiste de la version 1. Cette dernière a été créée pour WPF. Elle est assez complexe mais offre de grandes possibilités. Cette branche “canal historique”a évolué durant plusieurs années jusqu’à la création de PRISM pour WinRT évoqué plus haut. Il s’agissait alors de recréer une librairie MVVM spécifiquement étudiée pour les applications WinRT. Cette version ne reprend pas le code de celle pour WPF et suit une logique relativement différente. Il faut dire que l’esprit d’une app Metro sous Windows 8 n’est pas tout à fait le même que celui d’une application WPF pour Vista…

Mais le travail ne s’est pas arrêté là. Le monde a encore changé et WinRT s’est effacé au profit de UWP. PRISM s’est adapté (ce qui n’était pas difficile car UWP n’est qu’un nom de rechange marketing pour WinRT au final tant Windows 8.x et 10 reprennent sans les nommer identiquement les principes de RT et de Metro).

Mais le monde a encore bougé… Et Microsoft s’est engagé dans la bataille du cross-plateforme a défaut d’imposer un cross-form-factor 100% maison avec Windows 8 et 10. Cette ouverture à Android, iOS et Mac OSX, tout comme à Linux devait connaître une phase d’unification. Xamarin et plus spécifiquement les Xamarin.Forms avec XAML marquent ce tournant.

PRISM s’est alors adapté toujours avec la même lucidité et la même volonté de coller aux besoins de l’instant.

Et c’est aujourd’hui une librairie “unifiée” qui nous est offerte. Elle possède un “Core” (noyau) commun et des extensions spécialisées selon la plateforme, notamment les Xamarin.Forms donc.

La librairie PRISM est aujourd’hui un framework MVVM unifié pour WPF, UWP et Xamarin.Forms, ce qui met fin à l’éclatement des versions. Nous en sommes à la V5 et le support de Windows 8.x ou Silverlight n’est plus assuré (sauf à utiliser les anciennes versions stables pour ces environnements).

PRISM, MvvmLight, Caliburn … ?

On peut se poser la question de savoir quel librairie utiliser pour appliquer MVVM facilement dans un projet. PRISM, MvvmLight, Caliburn.Micro… et plein d’autres ont existé et existent toujours. Sans parler des comètes comme Jounce hélas aussi éphémère que Silverlight pour lequel elle était totalement dédiée. J’ai adoré JOUNCE et son intelligence, dommage qu’il n’ait pas connu de continuité. Ne vous fiez pas à une recherche sur Dot.Blog qui vous donnera un seul article consacré entièrement à Jounce. En effet cet article permet de télécharger un ebook de 110 pages où je décortique totalement ce framework !

Pourquoi parler de cette curiosité du passé ? Parce que je crois qu’un développeur qui veut appliquer MVVM correctement doit posséder une “culture MVVM”. Et les frameworks innovants ayant chacun leur approche de la problématique, les connaître ouvre l’esprit et apprend beaucoup de choses. Comprendre le fonctionnement de Jounce aujourd’hui n’est donc pas anachronique. Pas plus que les premières versions de PRISM pour WPF ou Caliburn avant qu’il ne se simplifie et devienne Caliburn.Micro, ou bien entendu Mvvm Light et plein d’autres moins connus.

D’ailleurs cette “culture MVVM” est la seule qui puisse vous permettre de vous décider pour l’un des frameworks aujourd’hui disponibles pour Xamarin.Forms par exemple… Sinon comment faire ce choix ? Par “plouf plouf” ?

Pour les Xamarin.Forms il existe plusieurs possibilités et opter pour l’une d’entre elles ne se fait pas au lancé de dés. On trouve en effet dans Xamarin.Forms de nombreuses choses pour supporter MVVM “out of the box”. Commandes, Injection de dépendances, messagerie, etc.

Des librairies assez simples comme Mvvm Light devront d’ailleurs relever le défit car entre les Xamarin.Forms toutes seules ou en ajoutant Mvvm Light on y gagne peu (surtout que pour le moment il n’y a pas vraiment de support de la navigation dans Mvvm Light, voir mon livre pour trouver du code qui résout cela !).

Pour les Xamarin.Forms, outre ce qu’il a de base, outre Mvvm Light, on trouve d’autres librairies MVVM comme Caliburn.Micro ou PRISM (et quelques autres).

Pourquoi choisir PRISM ?

Si vous avez la culture MVVM vous pourrez répondre seul à cette question en étudiant les possibilités de chaque framework… Si vous n’avez pas encore cette culture vous pouvez l’acquérir mais entre temps il faudra choisir pour les projets à débuter maintenant…

Les Xamarin.Forms seules offrent beaucoup de choses comme je l’ai dit, mais cela n’est pas aussi unifié que dans un framework et cela se ressent. Pour une toute petite app c’est malgré tout un choix qui a l’avantage de ne pas créer de dépendances supplémentaires.

Mvvm Light n’apporte pas beaucoup par rapport à ce que font les Xamarin.Forms de base, mais tout de même il offre justement une forme d’unification et puis c’est un framework très utilisé, simple à comprendre, et on peut vouloir conserver sa logique au sein d’équipes qui l’utilisent par ailleurs.

Caliburn.Micro est un choix déjà plus “engagé” ! La librairie Caliburn originelle est d’une complexité qui peut dérouter. La version Micro qui finalement a remplacé la version originale se veut une simplification, ce qui est vrai, mais avec un esprit identique qui peut ne pas convenir à tout le monde. Malgré tout c’est un excellent framework MVVM programmé avec une grande intelligence. Il plait ou non, mais on ne peut se permettre de l’occulter. Bien plus puissant que Mvvm Light Caliburn.Micro offre beaucoup de services et d’automatismes avec de la souplesse.

MvvmCross ! Certains pouvaient croire que j’allais l’oublier… Pas après avoir tant écrit à son sujet et avoir  produit 12 vidéos d’une heure sur YouTube sur Xamarin et MvvmCross … Même si les Xamarin.Forms font perdre un peu de l’intérêt que MvvmCross avait avec les version Xamarin dédiées (Android et iOS), c’est une excellente librairie MVVM. Il y a au moins douze ou treize heures de vidéos à regarder sur le sujet sur ma chaîne YouTube, ça devrait suffire pour vous faire une idée !

Vient enfin PRISM.

Qu’est-ce que vaut PRISM ? Comment se positionne-t-il par rapport aux autres ? Personnellement je le verrais plus proche de Caliburn que de Mvvm Light. Il reprend certaines choses de ce dernier mais est plus complet sans avoir la complexité conceptuelle de Caliburn. Côté code c’est pareil, c’est programmé avec plus de finesse que Mvvm Light mais pas aussi alambiqué que Caliburn.

PRISM pourrait être ainsi le choix du juste milieu. Entre étendue des possibilités et apprentissage pas trop pénible.

Mais là encore seule votre culture MVVM vous permettra de trancher !

Et plus loin ?

Les prochains articles vont entrer plus en détail dans le fonctionnement de PRISM sous Xamarin.Forms, ce sera l’occasion d’enrichir cette fameuse culture MVVM et de vous faire une idée sur ce framework…

Conclusion

Et bien… je vous donne rendez-vous pour la partie 2 !

Stay Tuned !

blog comments powered by Disqus