Tech Days 2010 : WCF RIA Services

Executive summary : WCF RIA Services est un framework assez extraordinaire, dans le sens où, en règle générale, un framework correspond à un tiers. Ici, on ajoute une couche composite en deux parties (client / serveur) autour des services WCF, pour mieux faire communiquer un client, typiquement Silverlight, avec des services de données (souvent Entity Framework, mais potentiellement n’importe quel fournisseur de données, même sous forme de services, comme le montre un exemple avec SharePoint). Cette approche permet par exemple, de définir une seule fois des règles métier qui seront appliquées sur le serveur mais aussi sur le client. Réellement impressionant. A tester, parce que porteur d’un vrai potentiel de productivité.

Vu que les gens se sont rendus compte que les places sont parfois chères, c’est le rush, et tout le monde est assis un quart d’heure avant le début de la session. Les intervenants meublent donc en répondant à des questions générales sur Silverlight (déploiement, etc.). Le plugin Silverlight est désormais, selon Microsoft, présent sur 50% des PC grand public. Le déploiement ne sera à priori jamais poussé par Windows Update. Ca permettrait de monter très vite à un niveau de pénétration énorme, mais il y a apparemment des problèmes légaux (j’imagine que ce que l’orateur voulait dire est qu’un concurrent installé de Silverlight – pas de nom : même Apple tire dessus, alors on ne va pas en rajouter – péterait certainement un câble auprès de la Commission Européenne si Microsoft faisait ça).

Buts de RIA Services

Les buts de ce framework sont de simplifier le développement RIA, d’améliorer la productivité métier et de masquer la plomberie. En particulier, pour le métier, il serait intéressant de ne pas dupliquer les règles métier simples de validation, tout en ne faisant pas obligatoirement un aller-retour serveur. Donc, faire quand même une validation côté client, mais sans dupliquer le code. Ca paraît intéressant…

Démo

Les intervenants montrent une historique des applications n-Tiers, avec l’évolution des couches et des liens entre chaque, et on passe à la première démo.

On commence par un modèle Entity Framework, et on crée des services sur ce modèle pour le récupérer sur Silverlight. Le but de RIA WCF Services crée un Domain Service, qui va englober tout ceci. On ajoute donc ce type d’élément en le faisant pointer sur le modèle EF. On peut choisir les entités à exposer et si elles doivent être éditables ou pas.

RIA Services génère des requêtes qui sont appelables par le client. [EnableClientAccess] indique à Silverlight que ces fonctions lui sont accessibles. RIA Services n’est pas limité à EF comme base de fonctionnement, mais peut s’accommoder d’autres services fournisseurs de données. Le but est d’encapsuler tout ce qu’il faut pour Silverlight. Cette couche permet aussi de ne pas avoir à recalculer les proxies lors du changement des services. C’est annoncé comme un gain de productivité. Personnellement, je ne pense pas que ça soit prioritaire.

Le DomainDataContext est le pendant côté client du DomainService côté serveur. Ce contexte client est instancié comme n’importe quelle classe, et on peut s’en servir pour faire du binding, mais il faut aussi appeler Load() en lui passant une Query générée automatiquement sur le contexte, par exemple context.Load(context.GetMoviesQueries).

Il y a enc ore plus simple : quand on crée un contexte dans Silverlight, on dispose de DataSources qu’on peut glisser-déposer sur la surface de conception, un peu à la manière de la création d’une fusion Word ou d’un reporting SQLServer.

Plus loin avec RIA Services

On va maintenant rajouter des fonctions comme le tri, la notion de données maître / données filles, un DataPager, etc. Bref, plein de choses intéressantes à partir du moment où on peut vraiment les utiliser industriellement. Par exemple, il faudra bien voir que le gestionnaire de page descend bien jusqu’à l’instruction TOP dans la base de données, ou au moins est supporté par un cache serveur, sinon ce n’est pas la peine. La démonstration montre que c’est bien le cas, en tout cas entre le client Silverlight et le serveur WCF. Le fait de placer le pager suffit.

Bizarre : encore une fois (ce coup-ci pour la possibilité de créer des grilles de Layout directement dans le designer Silverlight), les intervenants présentent comme une nouveauté de Visual Studio 2010. A vérifier, mais je suis à peu près sûr que ça existait en VS2008.

Toutes ces fonctionnalités sont intéressantes, même si on a toujours une gêne à voir la facilité avec laquelle ça se met en place. Du coup, le risque est que les développeurs comprennent de moins en moins ce qui se passe derrière et du coup aient de plus en plus de mal à travailler sur les quelques cas où le designer ne peut plus faire le travail. Il faut quand même en laisser suffisamment pour que le développeur garde le contrôle du code, même si il est généré. Encore une fois, ceci est un point de vue personnel, et je ne suis peut-être qu’un vieux grognon…

On peut mapper sur IsBusy pour que le contexte nous renseigne sur le fait qu’il est occupé à aller chercher de la donnée côté serveur. L’affichage de cette petite boîte d’attente est bien sûr customisable en XAML, même si elle est déjà très propre.

Enfin, la démonstration montre la possibilité d’édition. RIA Services gère pour nous du tracking d’objet, de façon à ne renvoyer que les modifications atomiques de données, même dans une liste complète qui lui avait été passée avec un pager. On rajoute un bouton, et on peut ajouter un appel à SubmitChanges() sur le contexte. Il faut en plus bien sûr s’abonner aux retours de cette fonction pour vérifier qu’il n’y a pas eu de problème d’écriture sur le serveur (locks, erreurs, accès concurrents, etc.)

Validation de données

RIA Services pousse les règles extraites du modèle d’entité vers le client, de façon que Silverlight puisse afficher des erreurs de saisie. On peut par exemple mettre en place un décorateur [Required] sur le modèle côté serveur, et on a automatiquement le message côté Silverlight qui apparaît. Donc, non seulement les contrôles de validation ont été générés automatiquement sur les champs disposés sur le designer, mais en plus la règle a été descendu sur le client. Il y a aussi l’attribut [RegularExpression] ou [StringLength] qu’on peut utiliser, et bien sûr customiser avec des messages d’erreur customisés.

On peut également écrire des règles complexes en .NET et elles seront aussi portées vers le client : vu que c’est du code .NET, on peut les véhiculer automatiquement sur le tiers client.

Ca paraît anecdotique à première vue, mais en y réfléchissant un peu, je peux compter de nombreux cas de validation où ce genre de duplication nous a amené à ne pas valider côté client, et donc à avoir une application moins réactive. Pour tout ce qui est validation simple, ça pose rarement des problèmes, mais dès qu’on arrive sur du vrai métier, il y avait un choix qui est fortement simplifié par cette approche. Je me rappelle m’être demandé un jour si ça ne vaudrait pas le coup de se baser systématiquement sur des fichiers XML de règles métier qu’on enverrait sur le client en début de session. Avec cette solution, on règle le problème, et de manière plus élégante et globale.

Sécurité

Une remarque préalable est que ces services ne sont pas limités à une base de données, mais à n’importe quel POCO ou NHibernate ou même des services Azure. De même, le client préférentiel est Silverlight, mais ça peut être ASP.NET, AJAX ou même XML.

Note : Expression Gallery expose des styles contenus dans Style.xml qu’on peut simplement poser dans le projet pour que ce soit plus professionnel.

Le modèle par défaut propose un lien login sur la feuille de base, qui prend en compte la création d’utilisateur avec un formulaire et les MembershipProvider d’ASP.NET. On peut également mettre en place l’authentification intégrée Windows, et Silverlight peut envoyer les crédentiels.

[RequiresRoles] permet de rajouter des droits par rapport aux profils, etc. Par défaut, les utilisateurs sont stockés dans une base de données incorporée au projet, et on y a accès par la configuration de l’application.

On peut également personnaliser la fenêtre d’authentification. Voir le blog de David Rousset (“Davrous”, ou même “Yodaman”) pour la façon de faire. Il a eu la gentillesse de poster un commentaire avec l’adresse du billet correspondant. Pour rentrer l’avatar, par exemple, on peut utiliser le drag & drop qui est désormais géré par Silverlight, ou même le pilotage de la webcam.

Les trois dernières minutes de la session (c’est chronométré) vont servir à montrer du Sharepoint. Sharepoint expose les listes disponibles sous forme de services REST. Du coup, on peut utiliser les RIA Services pour récupérer ce contenu, en référençant l’URL de type .svc dans RIA Services comme un domaine. Par contre, dans ce cas précis, RIA Services ne masque pas l’asychronisme et il faut gérer soi-même l’appel Begin et la récupération du retour asynchrone du serveur. Il est à noter que l’Intellisense fonctionne dans tous les cas ci-dessus, y compris les objets venant des listes Sharepoint.

Conclusion

Visual Studio peut également déployer sur SharePoint à partir de la version 2010. Démonstration très impressionnante. Maintenant, la même question que plus haut : est-ce que ce n’est pas trop simple ? La bonne nouvelle, de mon point de vue, est qu’on est de moins en moins Microsoft-centrique. L’interopérabilité commence gentiment à arriver dans les faits.

Note : je rajoute ça ici après coup, parce que je ne me rappelle plus qui en a parlé. Scott Guthrie a annoncé que la RC de Visual Studio 2010 avait réglé les problèmes de performance des deux betas, et qu’on avait déjà suffisamment de steak pour lancer ça sur un netbook. L’assemblée a paru dubitative, mais personnellement, je suis convaincu : j’ai la beta sur un EeePC, et ça marche bien. Ce n’est pas la foudre, c’est clair, mais pour des petits programmes de test des technologies, ce n’est pas plus loin que des grosses solutions sur ma bécane de guerre au bureau. Donc si la RC va effectivement bien plus vite, c’est tout bon pour moi.

[Edit]

Je rajoute à la main les commentaires, suite migration de mon ancienne plateforme de blog sur celle-ci.

David Rousset :

Bonjour,

Merci pour cet excellent compte-rendu. Davrous, c’est moi Smile et le tutorial sur la personnalisation du formulaire d’authentification WCF RIA Services/SL4 se trouve ici : blogs.msdn.com/…/…ion-de-wcf-ria-services.aspx

Bye,

David

About JP Gouigoux

Jean-Philippe Gouigoux est Architecte Logiciel, MVP Connected Systems Developer. Il intervient régulièrement à l'Université de Bretagne Sud ainsi qu'à l'Agile Tour. Plus de détails sur la page "Curriculum Vitae" de ce blog.
This entry was posted in Retours. Bookmark the permalink.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha Captcha Reload