IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Création d'une architecture MVVM


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut Création d'une architecture MVVM
    bonjour

    voilà j'ai pris connaissance de MVVM et du MVVM Light toolkit, mais j'aimerai "l'adapter" un petit peut dans mon archi.

    Concrètement, j'ai créé un projet d'application Web Silverlight (3). J'ai vu dans de nombreux exemples que les View ViewModel et Model était créées toutes dans le même projet (de type Silverlight).

    Mon "soucis" est quil faut nécessairement que j'utilise des dll compilé avec le runtime du Framework 3.5. Etant donné qu'aucun référencement n'est possible entre ces dll et le projet Silverlight, je compte passer par des services WCF. C'est là que je bloque: comment répartir mes view, viewModel, et model ?

    j'ai pensé à ceci:

    couche IHM -> Silverlight avec les pages xaml, le locator, et les ViewModel
    couche IHM.web -> Framework 3.5, avec les accès à mes controleurs pour les appels, et un accès à ma couche transverse Model, qui contiendra les interfaces publiques de mes classes
    couche Model -> Framework 3.5, qui est la couche transverse citée ci dessus.

    j'espère que c'est clair..

    merci par avance pour vos conseils

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Pour la View ben l'interface SL.
    La ViewModel -> ton propre code qui appelle tes services WCF via le proxy généré par VS.
    Le Model -> les classes proxys générées par VS.

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    Pour la View ben l'interface SL.
    La ViewModel -> ton propre code qui appelle tes services WCF via le proxy généré par VS.
    Le Model -> les classes proxys générées par VS.
    +1, c'est l'architecture la plus simple mais la plus efficace

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    ohla ok dans le principe mais il faut m'éclairer.. as tu un exemple de ce type d'architecture?

    et en faisant cela, je garde MVVM? je veux dire les ICommand, InotifyPropoertyChanged etc.. tout cela est utilisé normalement ?

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par johnaliashead Voir le message
    et en faisant cela, je garde MVVM? je veux dire les ICommand, InotifyPropoertyChanged etc.. tout cela est utilisé normalement ?
    C'est justement avec MVVM que tu exploites au mieux ces fonctionnalités

    Pour l'exemple, regarde sur Developpez.com, y'a un article qui explique comment mettre en place cette archi avec WPF (mais c'est pareil).

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    bon j'ai enfin eu le temps de lire l'article sur mvvm que tu m'as conseillé.
    Si c'est bien celui ci http://japf.developpez.com/tutoriels...-et-testables/ alors ça ne répond pas à ma question, car là ça parle bien de la mise en place de mvvm, mais pas d'architecture..

    je ne comprend pas Skyounet les classes proxy générées par VS.. as tu des exemples pour ça?

  7. #7
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    les classes proxy générées par VS
    Quand tu intègres des WebServices dans ton appli Silverlight, VS te génére des classes automatiquement (les classes proxy) afin de pouvoir communiquer avec ton serveur.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    ah ok si c'est bien ce que je pense je l'ai déjà fait, c'est juste que je n'avais pas compris ce terme de génération de proxy.
    En fait, cette génération, c'est quand je vais référencer un service dans mon projet Silverlight et que je vais avoir accès à plusieurs méthodes, comme par exemple le DoWorkCompleted, DoWorkAsync ...etc.
    Il y a aussi la génération du ServiceReference.ClientConfig...

    c'est bien ça la génération du proxy?

  9. #9
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    oui c'est ça

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    ok bon et bien ça c'est aquis merci

    maintenant le pb pour moi est de savoir à quel endroit scinder mes couches pour faire communiquer mon projet Silverlight a un projet Web (basé sur le framework.Net)?

    j'avais déjà fait une proposition d'archi, mais maintenant que je commence a avoir lu quelques articles sur le sujet, je le verrai plutot de cette manière:

    couche IHM -> silverlight, mes pages xaml -> couche view -> réservé aux designers.
    ------------
    couche IHM.Web (créée automatiquement par Visual Studio quand je crée un projet d'application Web Silverlight) -> Framework 3.5 -> contient mes ViewModel
    ------------
    couche Model, contient mes entité et les propriété avec mes onPropertyChanged.



    donc ok dans le fait qu'entre ma couche IHM et IHM.Web, il faut faire des services WCF, sinon impossible de communiquer.
    Le soucis, c'est que dans les exemples que je trouve généralement, la couche IHM contient une classe Locator. Dans ce locator on aura, par exemple, ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private static PersonneViewModel _personneViewModel;
     
    public static PersonneViewModel PersonneViewModelStatic
    {
          get
          {
              if (_personneViewModel == null)
              {
                  CreatePersonneViewModel();
              }
     
              return _personneViewModel;
          }
    }
    seulement voila, je ne peux pas écrire ce code dans mon locator, car il ne connaitra pas ma classe PersonneViewModel...

    comment faire cette manip?

  11. #11
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Non.

    Le MVVM est uniquement côté Silverlight, ton côté Web n'entre pas en compte.

    Tu as donc TonProjet.Web avec une architecture n-tiers (DAL, BL, Service par exemple).

    Ensuite tu as ton (ou tes) projet Silverlight.

    Model -> les classes générées par VS
    ViewModel -> Des méthodes qui appellent ton Web Service et qui retourne les objets de ton Model
    View -> Tes pages xaml.

    Tu peux tout mettre dans un projet ou faire 3 projets Silverlight différents.

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    as tu un exemple de ça stp? car je ne comprend toujours pas ou et comment vont communiquer les infos entre mon projet Web et mon projet Silverlight.

    Si MVVM est fait uniquement dans le contexte Silverlight, alors pourquoi passer par l'intermédiaire de web services dans les viewModel pour accéder aux Model ?

    oui en fait un exemple serait le top, je pense avoir compris l'idée mais ça n'est pas encore très clair ...

  13. #13
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par johnaliashead Voir le message
    as tu un exemple de ça stp? car je ne comprend toujours pas ou et comment vont communiquer les infos entre mon projet Web et mon projet Silverlight.
    Grâce au Web service !

    Si MVVM est fait uniquement dans le contexte Silverlight, alors pourquoi passer par l'intermédiaire de web services dans les viewModel pour accéder aux Model ?
    On ne passe pas par le Web service poru accéder au Model, on passe par le Web Service pour accéder à la base de données par exemple.

    Exemple :
    Tu as une BD d'employés. Tu crées ton edmx avec Linq to entities et tu te fais un service WCF custom qui retourne tous tes employés.
    Oyé ça fonctionne tu peux l'appeler de n'importe quel type d'application.

    Là tu décides de créer une application Silverlight, tu vas commencer par référencer ton service et là VS va te créer ce qu'on appelle des classes proxys qui vont te permettre de discuter avec. Tu vas donc avoir une classe MonWebService avec une méthode GetEmployees et également une classe Employee qui va service de conteneur pour stocker une employé. Ta méthode GetEmployees va donc retourner une ObservableCollection<Employee>.

    Tu as donc ici ton Model.

    Dans ton ViewModel tu vas te créer une commande qui va appeler une méthode qui va appeler créer une instance de la classe MonWebService et qui va appeler la méthode GetEmployees. Au retour de cette méthode tu stockes le résultat dans une propriété de ton ViewModel qui sera de type ObservableCollection<Employee> et qui s'appelera Employees.

    Ensuite dans ta page xaml tu vas instancier ton ViewModel en tant que ressource, tu vas créer une ListBox que tu vas binder sur la propriété Employees de ton View Model. Ensuite tu crées un bouton qui va appeler la commande de ton View Model.

    Et voilà tout fonctionne.

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    Tu vas donc avoir une classe MonWebService avec une méthode GetEmployees et également une classe Employee qui va service de conteneur pour stocker une employé. Ta méthode GetEmployees va donc retourner une ObservableCollection<Employee>.
    Etant également nouveau en service WCF j'ai du mal à comprendre ça. J'ai bien créé un WebService dans mon site Web, qui retourne une chaine de caractères on va dire. Quand je vais dans mon projet Silverlight, je fais "ajouter une référence de service", je recherche, je vois bien mon service, je valide, et là ça me crée dans mon dossier Service Reference mon Service (quand je l'ouvre je tombe sur l'explorateur d'objets), et il y a une classe ServiceReference.ClientConfig qui s'est ajouté.
    Mais je n'ai pas de classe générée avec le nom de MonWebService avec ma méthode à l'intérieur, ni de classe avec un conteneur .. ? comment les obtenir?

    ps: merci pour toutes ces infos en tout cas je comprend mieux le truc maintenant

  15. #15
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben tu ne vas pas avoir de classe proxy vu que tu retournes un string.
    Tu vas seulement avoir une classe proxy pour appeler le Web Service.

    ServiceReference.ClientConfig n'est pas une classe mais un simple fichier de config.

    Dans la répertoire Service Reference tu peux faire clic droit sur ta référence et View in Object Browser et là tu vas voir ta classe.

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    ok j'ai enfin compris le truc.. maintenant il faut que je mette en place, ce qui est une autre chose.. mais au niveau de l'architecture ça devrai aller..
    merci de t'être donné tout ce mal pour me faire comprendre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'une architecture base produit
    Par Davidb_ dans le forum QlikView
    Réponses: 1
    Dernier message: 27/11/2013, 14h01
  2. Création d'une architecture orientée service
    Par SoukainaC45 dans le forum Services Web
    Réponses: 3
    Dernier message: 13/11/2012, 16h20
  3. Commande avec arguments dans une architecture MVVM
    Par johnaliashead dans le forum Silverlight
    Réponses: 7
    Dernier message: 26/07/2010, 16h18
  4. XML : création d'une architecture hiérarchisé
    Par DonKnacki dans le forum VBScript
    Réponses: 2
    Dernier message: 07/11/2007, 16h15
  5. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo