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

Windows Communication Foundation .NET Discussion :

Comment garder une IHM cohérence ?


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut Comment garder une IHM cohérence ?
    Admettons que j'ai une application distribuée qui traite de généalogie.
    J'ai, notamment, une couche métier, exposée par un service WCF, qui s'exécute sur un serveur.

    Un de mes objets métier qui transitent entre le serveur et les clients est "Personne".
    Très simple, il comporte 3 propriétés. Deux strings : Prénom, Nom. Et une relation 1-0..1 avec un autre objet "Personne" : Conjoint.

    J'ai une jolie petite interface graphique pour manipuler ces données :


    Mon service WCF expose, entre autres, deux méthodes de la couche métier :
    void SeMarie(Personne a, Personne b);
    void Divorce(Personne a);
    Bon, ce cas est tellement simple qu'on pourrait se contenter de faire un update simple, du genre Personne.Conjoint = .....;
    Mais pour la clarté du problème, on va garder nos méthodes SeMarie et Divorce.

    Admettons que Jean Dupond n'est pas marié avec Jeanne. Si j'appelle service.SeMarie(jean,jeanne), jean et jeanne se retrouvent modifiés côté serveur. Cool. Qu'en est-il de l'IHM ? Comment garder la cohérence des données à ce niveau là ? N'y a-t-il pas moyen de rapatrier les modifications survenues sur le serveur au niveau du client ?

    Admettons que, plus tard, rien ne va plus et Jean décide de divorcer. service.Divorce(jean), donc.
    Aucune référence à Jeanne n'est passée au serveur, il pourra malgré tout modifier jean et jeanne sur le serveur, mais qu'en est-il du client ?

    En bref, comment répercuter, sur le client, les modifications, des objets métier, intervenues sur le serveur ?

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    euh...
    si tu maries jean avec jeanne, soit tu rafraichis tout jean apres mise a jour, soit tu geres la mise a jour cote client de jean, et, la prochaine fois que tu affiche jeanne, tu fais un aller-retour serveur, non ?

    Ou j'ai loupe une subtilité

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    si jean et jeannes sont affichés en même temps ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par davcha Voir le message
    si jean et jeannes sont affichés en même temps ?
    tu rafraichis les 2...
    pour le divorce, tu sauvegardes la référence à jeanne avant d'appeler Divorce, de façon à pouvoir rafraichir jeanne après

  5. #5
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Citation Envoyé par davcha Voir le message
    J'ai une jolie petite interface graphique pour manipuler ces données :
    T'as été conseillé par Thomas Lebrun en design ?
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    T'as été conseillé par Thomas Lebrun en design ?
    rhooo.... comme c'est méchant

  7. #7
    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 The_badger_man Voir le message
    T'as été conseillé par Thomas Lebrun en design ?

    Rhoo, n'en mais t'as pas bientôt finit de te moquer de mes talents de designer

  8. #8
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    T'as été conseillé par Thomas Lebrun en design ?
    C'était juste un exemple vite fait, destiné à illustrer ce post :p

    Sinon, pour mon problème, je pense que je vais me tourner vers un canal duplex et un contrat de callback.

    Donc en gros, sur mon service, les méthodes SeMarie(Personne item, Personne withitem) et Divorce(Personne item) appellent un callback du genre ConjointChanged(Personne item) chez le client.
    Par contre, comment conserver la référence "item" et "withitem" lors de sa serialisation/déserialisation ?
    J'ai tenté [DataContract(IsReference = true)], mais ça ne résoud pas le problème (c'est juste bon pour les références cycliques en fait)



    Du coup, actuellement, dans ma solution de test, j'ai un système que je trouve un peu bâtard :

    Côté serveur, j'ai un Dictionary<long, Personne> et un "long NextOID".
    Dans la classe "Personne", j'ai un attribut "OID" long.
    Quand le serveur instancie de nouvelles personnes, il renseigne l'attribut OID avec NextOID, puis insère la personne dans le dictionnaire, avec comme clef NextOID. Ensuite, NextOID est incrémenté de 1.
    Ce qui fait que chaque personne a un OID unique.

    Quand une personne transite par wcf sur le client, puis revient au niveau du serveur, l'attribut OID étant sérialisé, je peux retrouver la bonne référence dans mon dictionnaire.

    Je trouve cette solution particulièrement pas top. D'autant plus que si je veux pouvoir faire mon truc avec un canal duplex, il faudra que j'ai +/- le même système côté client.

    Y a-t-il un moyen pour conserver les références des objets qui transitent à travers un canal wcf ?...

  9. #9
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Citation Envoyé par davcha Voir le message
    Donc en gros, sur mon service, les méthodes SeMarie(Personne item, Personne withitem) et Divorce(Personne item) appellent un callback du genre ConjointChanged(Personne item) chez le client.
    Par contre, comment conserver la référence "item" et "withitem" lors de sa serialisation/déserialisation ?
    J'ai tenté [DataContract(IsReference = true)], mais ça ne résoud pas le problème (c'est juste bon pour les références cycliques en fait)
    Objet coté client != objet coté serveur
    Tu ne fais pas transiter des références mais des données.

    Citation Envoyé par davcha Voir le message
    Côté serveur, j'ai un Dictionary<long, Personne> et un "long NextOID".
    Dans la classe "Personne", j'ai un attribut "OID" long.
    Quand le serveur instancie de nouvelles personnes, il renseigne l'attribut OID avec NextOID, puis insère la personne dans le dictionnaire, avec comme clef NextOID. Ensuite, NextOID est incrémenté de 1.
    Ce qui fait que chaque personne a un OID unique.
    Tu risques d'avoir des pb quand plusieurs threads utilisent NextOID pour l'incrémenter.
    Utilises plutôt les Guid. Tu fais Guid.NewGuid() et c'est bon, t'as un ID unique.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  10. #10
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    Objet coté client != objet coté serveur
    Tu ne fais pas transiter des références mais des données.


    Tu risques d'avoir des pb quand plusieurs threads utilisent NextOID pour l'incrémenter.
    Utilises plutôt les Guid. Tu fais Guid.NewGuid() et c'est bon, t'as un ID unique.
    Ca forcément que les références sont différentes, comme on est pas forcément sur le même ordinateur. Je me demandais juste s'il n'y avait pas une méthode moins merdique que celle que j'utilise.

    (Merci pour le Guid, je connaissais pas :p)

Discussions similaires

  1. Comment garder une valeur ?
    Par Wchef dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/08/2008, 10h37
  2. comment faire une IHM en perl
    Par nidgem dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2007, 13h36
  3. Réponses: 4
    Dernier message: 12/12/2006, 08h14
  4. Comment garder une variable en mémoire...
    Par sam01 dans le forum Langage
    Réponses: 17
    Dernier message: 24/04/2006, 13h02
  5. Newbie : comment faire une IHM comme eclipse?
    Par eponette dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 02/03/2006, 16h25

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