Olivier Dahan

Microsoft MVP Silverlight 2013, 2012,
2011, MVP CAD 2010, MVP C# 2009


Membre du Developer Guidance Advisory Council Microsoft

Audit, Conseil, Formation, Développement
[WPF, Silverlight, WinRT, MonoDroid]

Historique

Article : JOUNCE (Silverlight, MEF et MVVM)

Read this article in your language IT | EN | DE | ES

Jounce... Cela fait un moment que je vous parle de l'article que je prépare sur le sujet... Ca a mis du temps, mais c'est un gros morceau ! Un framework MVVM "light" mais très subtile et bourré de bonnes idées. Au final un article de 110 pages environ et plus de dix applications exemples, mon record est battu !

Un toolkit MVVM pas si "light" que ça

Jounce, par son côté "light" semble se rapprocher de "Mvvm Light Toolkit" de Laurent Bugnion. Mais ce rapprochement est vraiment trompeur.

Jounce a été créé par quelqu'un habitué à PRISM et à Caliburn, deux toolkits de type "monstre", très sophistiqués et pas toujours faciles à prendre en main. D'où ma préférence jusqu'à maintenant pour "MVVM Light" qui est loin de couvrir tous les besoins mais qui le fait simplement et qui se maîtrise vite, gage d'un développement aisé (donc rapide et produisant du code maintenable).

En me plongeant dans Jounce j'ai découvert quelque chose de plus sophistiqué que ce que j'imaginais. Le code est petit. Mais il est condensé ! Pourtant il est facile à lire. Mais les principes qu'il utilise et qu'il met en oeuvre sont largement un cran au dessus de ce que MVVM Light propose. Jounce s'inspire directement de Prism et Caliburn...

Un toolkit "moderne"

Jounce utilise tout ce qui est moderne et "rentabilise" intelligemment toutes les nouveautés même celles de Silverlight 4, pour l'instant la dernière version releasée (la 5 arrive mais n'est pas encore annoncée officiellement).

J'ai vraiment eu un coup de coeur pour Jounce. Car le toolkit est finalement très proche des services rendus par Prism ou Caliburn, mais en ne gardant que ce qui est essentiel.

Très habitué à "MVVM Light" j'ai été enchanté par le côté "dépoussiéré" de Jounce. MVVM Light a tendance à utiliser des solutions simples ne tirant pas profit des dernières avancées. C'est aussi un avantage, MVVM Light fonctionne à la fois sous Silverlight, WP7 et WPF, là où Jounce ne fonctionne qu'uniquement sur Silverlight.

D'un autre côté, je n'ai pour l'instant jamais vu d'application reprise à l'identique sous ces trois environnements. Une application WP7 est très spéciale, WPF est utilisé pour faire des choses que la sandbox de Silverlight interdit. De fait une application qui serait "tel quel" portable Web, WP7 et WPF, cela n'existe pas vraiment. Ce qui diminue l'intérêt de la portabilité de MVVM Light, ou plutôt, qui conserve à Jounce tout l'intérêt qu'il mérite.

MEF

Jounce repose sur MEF, officiellement intégré au Framework 4.0. C'est en utilisant subtilement les possibilités de MEF que Jounce sait séparer le code de l'UI, de façon simple et efficace. MEF peut aussi être utilisé pour "modulariser" proprement l'application. C'est un sujet que j'ai d'ailleurs abordé dans un article assez gros aussi (voir MEF et Silverlight). MEF, il faut y goûter pour apprécier. C'est une façon de penser le code différente mais qui est très séduisante. Le mariage de MEF avec un toolkit s'appuyant dessus pour servir le pattern MVVM est une solution tout à fait séduisante.

Des services larges

Jounce offre une palette de services très large malgré sa petite taille. Il va jusquà couvrir la "blendabilité" si chère à MVVM Light et aux utilisateurs de Expression Blend.

MVVM est un pattern sur lequel j'ai beaucoup blogger, j'ai même été jusqu'à soulever le problème de sa légitimité en tant que "pattern". MVVM est une plutôt une guideline qui dit "faites ceci, ne faites surtout pas cela" mais qui n'explique en rien comment se plier à ses injonctions. De fait, c'est à chacun d'interpréter MVVM à sa guise, et selon ses compétences.

Et MVVM, dans la pratique, réserve bien des surprises et des difficultés d'implémentation. D'où la nécessaire aide d'un toolkit.

Mais tous diffèrent et interprètent les choses à leur manière. MVVM Light se révèle à l'usage trop simple pour couvrir toutes les difficultés de MVVM. Prism ou Caliburn sont des monstres qui ne peuvent s'utiliser qu'au sein d'équipes stables dans le temps, soudées, et de niveau techniques elévé et homogène. Caliburn était tellement compliqué que son concepteur a créé Caliburn.Micro, non comme un mini toolkit, mais bien comme une nouvelle version remplaçant l'originale.

Entre ces poids lourds et MVVM Light il n'y avait rien...

Maintenant il y a Jounce !

La légèreté de MVVM Light, la quasi totalité des services rendus par Prism ou Caliburn (modularisation, gestion des zones d'affichage, etc).

L'article à télécharger

Aller, j'ai assez parlé comme ça, je ne vais pas refaire ici les 110 pages de l'article :-) Mais j'espère avoir aiguisé l'appétit du visiteur pour qu'il télécharge et lise l'article !  

SL4Jounce.zip (2,24 mb)

 

Bonne lecture, et Bon développement avec Jounce !

Aujourd'hui c'est le BUILD aux USA, il y aura forcément des choses à en dire, alors...

Stay Tuned !

Comments (7) -

Steven
Steven
9/13/2011 9:26:51 PM

Salut Olivier,

Content de pouvoir lire ton article sur Jounce Smile

J'en suis à la page 41 mais je suis déjà très emballé par Jounce.

J'aime beaucoup le principe de séparer les données de conception et les données réelles dans deux ViewModel distincts.
De même, le fait de pouvoir intéragir avec le VSM depuis le ViewModel est une excellente idée. Avec MVVM Light, c'était assez galère à faire.
Je pourrais également citer la méthode RaisePropertyChange sans paramètre. Voilà qui va éviter pas mal de bugs dus à des fautes de frappes.

Je poursuis ma lecture Smile

Ps : Juste un petit détail, à plusieurs reprises au début du livre blanc, tu dis que DesignMainViewModel hérite de BaseViewModel (exemple à la page 29) alors que ce n'est pas le cas.

nk54
nk54
9/14/2011 12:02:22 AM

Le fameux Smile merci ! Je lis demain Laughing

jyl
jyl
9/15/2011 10:12:44 AM

Caliburn était tellement compliqué que son concepteur a créé Caliburn
Mhmmm ok, là je reste sans voix ;)

Steven
Steven
9/15/2011 10:45:48 AM

Tu as oublié le ".Micro" dans ton Quote.

La phrase complète est :
"Caliburn était tellement compliqué que son concepteur a créé Caliburn.Micro".

Sylvain
Sylvain
10/21/2011 4:00:37 PM

Je voulais juste prévenir que j'avais une petite question concernant jounce, je l'ai posé ici:

En, gros je voudrais faire un mélange sequential/parallel de requete asynchrone en silverlight.

Je pensais avoir trouvé une pépitte avec jounce
http://www.e-naxos.com/Blog/post/2011/06/01/Silverlight-Serialiser-les-taches-asynchrones.aspx

mais je vois qu'il ne répond que au problème du séquentiel.

Si vousa viez des idées je suis preneur Smile

Thierry
Thierry
5/21/2012 6:09:07 PM

Je n'arrive pas à exécuter l'Exemple5 EventAggregator, je ne vois pas de page MainPage.xaml.

Comment fait-on ?

Olivier
Olivier
5/21/2012 7:21:15 PM

@Thierry: il n'y a pas de MainPage.xaml mais une Main.xaml dans le répertoire Views.
L'exemple fonctionne bien, il faut juste bien suivre sa logique qui n'est pas évidente (les routes créées dans Bindings.cs, les ordres de navigation dans le Main qui charge les deux vues sender/receiver, etc).
Et il est préférable bien entendu de faire tourner l'exemple avec la copie de Jounce fournie avec, l'utilisation d'une version récente peut éventuellement avoir un impact que l'exemple ne peut, bien entendu, pas prendre en compte. A vérifier donc.

Pingbacks and trackbacks (1)+

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading