Dot.Blog

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

TinyMvvm sous MAUI

TinyMvvm est un toolkit MVVM pas très connu mais pas totalement inconnu non plus. Son portage sous MAUI lui donne une nouvelle impulsion, mais qu’apporte-t-il ?

MVVM

Je ne vous ferai pas l’affront de vous dire ce qu’est MVVM ni à quoi cela sert ni quelques sont les toolkits les plus utilisés, si vous lisez Dot.Blog vous le savez déjà, et sinon tapez « mvvm » dans le champ de recherche à droite sur le blog et vous aurez de quoi lire pour tout le printemps !

Donc TinyMvvm est un autre toolkit pour supporter le pattern MVVM plus facilement dans vos applications. 

TinyMvvm

Passé en version 4 pour MAUI, ce toolkit n’a pas encore de documentation ce qui est dommage. Son auteur a fait une vidéo de présentation à laquelle je vous renvoie si vous voulez voir à l’œuvre les détails (https://youtu.be/XnBmvOu3MO4).

Si je vous en parle c’est que ce toolkit est l’un des rares à proposer une alternative au Community Toolkit MVVM (la suite de Mvvm Light intégrée dans le CT pour simplifier), sans oublier FreshMvvm présenté dans mon dernier papier.

Je crois qu’il est important d’avoir plusieurs toolkits à étudier pour mieux comprendre MVVM et savoir pourquoi on utilise l’un plutôt que l’autre. Ce ne doit pas être un choix par défaut ou parce que tout le monde dit d’utiliser celui-ci ou celui-là.

Bien entendu je ne vous présente que les alternatives qui ont un intérêt et qui ont déjà une base d’utilisateurs leur donnant une certaine consistance. Pour les exotismes débridés je suis certain que les plus essayistes d’entrevous saurons trouver les pépites seuls !

Le code source de TinyMvvm se trouve ici : https://github.com/TinyStuff/TinyMvvm . C’est aussi une bonne base pour comprendre un toolkit que de regarder comment il est codé.

Features principales

TinyMvvm se distingue par les fonctionnalités suivantes :

  • NavigationHelper qui prend en charge à la fois Shell et le NavigationService classique.
  • Passage d'objets en tant que paramètres, à la fois lors de l'utilisation du Shell et de la navigation classique.
  • Navigation ViewModel avec Shell.
  • Ajoute le BindingContext dans la View, mais on peut aussi utiliser la DI dans les VIewModels.
  • Événements de cycle de vie dans les ViewModels.
  • Implémentation d'InotiftyPropertyChanged.

Alors certes cette liste n’a rien de particulièrement innovant ni de « ouf ». C’est un toolkit MVVM qui fait son job rien de plus. 

Tout est dans la façon de le faire bien entendu. Soit parce que cela simplifie réellement le code, soit parce que la philosophie proposée colle mieux à votre état d’esprit.

Get Started

Pour commencer correctement il est préférable de lire le petit document « get started » écrit par l’auteur : https://github.com/TinyStuff/TinyMvvm/blob/master/docs/GetStarted.md 

Une présentation vidéo par l’auteur est aussi disponible ici : https://www.youtube.com/watch?v=rS-cnU86870 

Ainsi qu’un article du même présentant les avantages de ce toolkit : https://danielhindrikes.se/index.php/2018/06/26/tinymvvm-the-best-mvvm-library-for-xamarin-forms 

Quels apports ?

La différence avec d’autres toolkit va se faire sur le support d’un lien plus ou moins automatisé entre les Views et les ViewModels. TinyMvvm utilise par exemple une View de base (ViewBase) et la DI (Autofac ou autre). 

Autre point de différence à regarder c’est la navigation, chaque toolkit propose sa vision et supporte ou non le Shell. Il faut faire très attention à ce détail. 

De même, l’accès aux événements de navigation dans le ViewModel peut s’avérer essentiel (TinyMvvm le propose). 

Ou bien on s’arrêtera sur la façon de passer des paramètres lors de la navigation et comment un ViewModel peut recevoir ces données. TinyMvvm propose sa voie, mais d’autres toolkit n’offrent pas du tout d’options pour cette problématique pourtant réccurente.

Bref, quels sont les apports de TinyMvvm, notamment par rapport au Community Toolkit MVVM ? Techniquement je ne vois pas d’ajout décisif ni de fonctions « killer ». Je conseillerai donc de rester sur le CT Mvvm. Mais peut-être que l’approche de TinyMvvm vous semblera plus agréable, c’est à vous de décider. Encore faut-il s’intéresser à tous ces toolkits et les regarder de près.

Conclusion

TinyMvvm a ses partisans, c’est un toolkit intéressant et bien fait mais sans fonctions délirantes. Je ne suis pas très chaud de s’écarter des standards et des routes bien balisées car au moment des migrations les dépendances à du code tiers plus maintenu peut représenter des coûts colossaux. C’est pour cela que j’ai toujours conseillé Prism sous WPF puis Mvvm.Light qui a suivi toutes les évolutions de Windows Phone, de WinRT, de Xamarin.Forms et UWP. Et même lorsqu’il s’est arrêté, son concepteur a aidé à donner naissance au Community Toolkit Mvvm. Ici la chance sourit à ceux qui ont utilisé TinyMvvm sous Xamarin.Forms et qui doivent porter leur code sous MAUI. Car comme pour FreshMvvm une version MAUI de la bibliothèque existe et cela leur facilitera grandement le travail de migration.

En dehors d’une telle migration y-a-t-il un intérêt à utiliser TinyMvvm plutôt que le CT Toolkit MVVM ? Je ne vois aucune raison technique qui ferait pencher la balance en ce sens. Maintenant on peut se sentir plus ou moins en résonnance avec un Toolkit et TinyMvvm n’est pas un mauvais toolkit. A vous de voir donc, même si mon conseil est d’utiliser le CT Toolkit.


Stay Tuned !
blog comments powered by Disqus