WCF RIA Services 1

Qu'est ce que WCF RIA Services ?

Vous souhaitez que votre Client Services RIA soit informé de la logique d'application qui réside sur le serveur, mais vous ne souhaitez pas développer et gérer cette logique à la fois sur la couche de présentation et sur la couche intermédiaire. WCF RIA Services est la solution.

Downloads :
Installation de la plateforme :
WCF RIA Services Toolkit
WCF RIA Services V1.0 SP2
Install pénible, devenv.exe met à genoux la machine pendant au moins un quart d'heure. Ensuite c'est ngen.exe qui prend la relève. Il faut patienter car la barre de progression est au max et fait penser à un problème d'installe. Mais cela finit par se terminer avec succès ...

Samples :
David Rousset
http://code.msdn.microsoft.com/How-to-open-a-WCF-RIA-171139fb

Après avoir récupéré le projet :
DemoKeynoteTechdaysEtape2
Avoir transformé le projet Silverlight 4 en Silverlight 5,
Cela ne fonctionne pas ... Une erreur d'un autre monde "Http client" attendu.

Je décide de refaire les fichiers générés du Domaine Service Class dans la partie Web :
Je supprime le deux fichiers :
FilmsService.cs
FilmsService.metadata.cs
et je recommence :
Add Domaine Service Class
FilmsService Domaine Service Class
L'application se met à tomber en marche :

Utilisation d'un Domaine Service Class en Silverlight
Étonnant non ...

Aller plus loin

C'est quoi le fichier : 
BookShelf.Web\Services\BooksDataService.svc

Dans l'application WPF (WpfBookShelf) bouton droit sur "Service References" clic sur "Add Service Reference ...". Après avoir cliqué sur "Discover" (in solution) on voit appraitre un choix de services présents dans la solution :
http://localhost:62207/Services/BooksDataService.svc

Lorsque l'on cherche à faire "Add New Item" dans BookShelf.Web\Services, pour ajouter ce type de fichier, l'icone de ce fichier ne correspond pas, cette icone correspondrait plutot à Web Service .asmx BooksDataService.svc est en fait un "WCF Data Service" et pour le lier à l'entities de l'Entity Framework, il y   a un peu de code à écrire :

WCF Data Service
Comparons les deux codes, celui généré automatiquement :

namespace BookShelf.Web.Services
{
    public class WcfDataService1 : DataService< /* TODO: put your data source class name here */ >
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
            // Examples:
            // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
            // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        }
    }
}

Et celui du projet BookShelf :

namespace BookShelf.Web.Services
{
    public class BooksDataService : DataService<BookShelf.Web.Models.BookClubEntities>
    {
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
        }
    }
}

Voilà maintenant une vision peut-être un peu plus claire des WCF RIA Services avec les deux types de class principales :
Domain Service Class directement reliée à l'ObjectContext du modèle Entity .edmx
et
WCF Data Service qui permet d'exposer un WCF Service utilisable par d'autres applications comme WPF ou Windows Phone.

Au passage on aura vu chez David Rousset :
Tous les moyens d'exposer un WCF RIA Service.

MVVM de Laurent Bugnion

http://www.galasoft.ch/
A propos de Laurent Bugnion et du MVVM Light Toolkit. Tout ce qu'il faut pour installer les DLL nécessaires au développement d'applications basées sur le modèle MVVM.

http://mvvmlight.codeplex.com/
Code source du MvvmLight Framework dans le CodePlex mais pour les télécharger vous devez être enregistré.

Petit tour rapide dans le Framework MVVM Light

On trouve des Solutions pour VS 2010 dans :
\\mvvmlight_0f4486b50609\GalaSoft.MvvmLight\GalaSoft.MvvmLight (NET4).sln

Command
  RelayCommand(Action execute)
  RelayCommand(Action execute, Func<bool> canExecute)
  RelayCommand(Action<T> execute)
  RelayCommand(Action<T> execute, Func<T, bool> canExecute)

Les commandes n'utilisent pas directement Action mais un objet du framework WeakAction
  public class WeakAction<T> : WeakAction, IExecuteWithObject

Messaging
  Design pattern mediator for communication beetween ViewModel
  GenericMessage<T> : MessageBase
  interface IMessenger
    void Register<TMessage>(object recipient, Action<TMessage> action, ...);
    void Send<TMessage>(TMessage message);
    void Unregister<TMessage>(object recipient);
  NotificationMessage : MessageBase

Parfois appelé Observer dans le sens ou l'on s'enregistre pour observer le comportement d'un objet ...

ObservableObject : INotifyPropertyChanged

ViewModelBase
  public abstract class ViewModelBase : ObservableObject, ICleanup

MvvmLight.Extras

Extension du framework MvvmLight de base.

Command
  EventToCommand : TriggerAction<DependencyObject>
  Il y a différentes versions : NET35, WPF, VS10, SL. Là encore la comparaison des versions donne une  indication des connaissances qu'il faut et de la complexité qu'il y a à écrire un tel code.

IoC
  Injection of controls, tient tient, on se rapproche encore de Prims
  using Microsoft.Practices.ServiceLocation;
  interface ISimpleIoc : IServiceLocator
  Laurent Bugnion prend le parti de créer son propre IOC Container basé sur un projet du codeplex Ici.

Compilations conditionnelles

#if SILVERLIGHT
#if NETFX_CORE
#if !WP71
#if !SL3
#if !WP71
#if !NETFX_CORE
#if !SILVERLIGHT
Cela donne une idée de la connaissance qu'il faut avoir et de la complexité qu'il y a à écrire un code pour ces différents environnements.

Blog

Le Blog de Laurent Bugnion est organiser de façon chronologique et se développe autour des différents évènements mondiaux auxquels il participe, c'est un peu difficile de s'y retrouver je trouve. Par exemple pour accéder aux exemples, il faut d'abord tomber sur l'article :

http://channel9.msdn.com/events/MIX/MIX11/OPN03
Deep dive in MVVM

Ensuite Laurent nous donne un lien vers son code source, on retourne dans son blog :

http://blog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx

Le preview :

http://blog.galasoft.ch/archive/2011/04/14/mvvm-light-v4-preview-3-bl16-mix11-edition-mvvmlight.aspx

Mais si on clique alors sur Home pour tenter de lire d'autre articles, on est alors un peu perdu ... Remarquez, c'est un peu normal puisque l'organisation de l'information y est chronologique.

Samples

Les exemples développé par Laurent Bugnion au cours de ses présentations :

Laurent Bugnion at MIX10


Codes sources

http://www.galasoft.ch/blogs-all/Resources/MIX10/MIX10-MVVM-Samples.zip

Laurent Bugnion at MIX11

http://blog.galasoft.ch/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx

Codes sources

http://www.galasoft.ch/mvvm/resources/Samples/MIX11-DeepDiveMvvm-Samples.zip







C# Design Patterns

Les 23 patterns du GoF (Gang of Four) sont décrites sur le Site de  Do Factory.

Les trois grands types de patternes

Création - Creational

   Abstract Factory
Abstract Factory
Création de famille d'objets sans être obligé de spécifier leurs classes concrètement
  Singleton

Structure - Structural

  Adapter
Adapter
Adapter les interfaces pour faire travailler des composants ensemble
  Facade
  Proxy
Proxy
Gestion du contrôle d'accès

Comportement - Behavioral

  Observer

DP - Comportementale - l'Observer
On To Many dependances pour notifier une mise à jour.

Au sein du CodePlex : Tutorial: Common Design Patterns in C# 4.0
Exemple très intéressant avec du code C# et des modèle UML
Il manque malheureusement bon nombre de patterns

Cela ne va pas sans un peu de conception UML.

Et concernant le pattern, à lire : Singleton Design Pattern

Et si l'on compare avec la solution du Singleton décrite par Do Factory
Et bien on est pas sorti d'affaire ...

MVVM de Wilfried Woivré

Pour être complet il faut citer également :

Patrick Payet
Alexis Pera
Sébastien Courtois

La meilleur documentation que j'en trouve c'est :

Wilfried Woiré & Azure - Le design pattern - MVVM

Il semble que ce sample MVVM soit "absorbé" par Laurent Bugnion et son MvvmLight car Wilfried en fait de nombreuses références.

D'autre part cet article date de 2009. C'est un peu vieux.

Mise à jour Mais 2019
Je cherche simplement si ces liens sont encore valable et les retrouver quand c'est possible, Wilfried a quelque peu changé son site :

Archives
On trouve d'autres articles sur le MVVM et finalement une référence sur le projet Gala Soft c'est à la mode est migré vers le GitHub :

GitHub - laurent bugnion / mvvmlight