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

Langages de programmation Discussion :

Utilisation du pattern Observateur dans la mise en place d'une architecture MVC


Sujet :

Langages de programmation

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Utilisation du pattern Observateur dans la mise en place d'une architecture MVC
    Bonjour à tous,

    Essayant de mettre en place tant bien que mal une architecture MVC dans mes programmes, j'ai opté pour l'utilisation du pattern Observateur pour la mise à jour de la vue.
    Ainsi mes classe appartenant au modèle seront observables.
    Mais mon problème est du côté de l'observateur, dans l'identification des données qui ont étés modifiées et qu'il faut mettre à jour dans la vue. Je m'explique...
    Prenons une classe du modèle qui contient 5 données affichées dans la vue.
    Une des données est modifiée et la classe notifie ses observateurs qu'il y a un changement.
    Le problème est que les observateurs ne savent pas quelle donnée a été modifiée et donc laquelle mettre à jour ?
    Je vois 2 solutions pour gérer cela :
    - Soit tout rafraichir sans distinction : pour les vues complexes, contenant notamment des listes et des tables, cela peut être couteux en temps machine, et puis c'est pas très "propre".
    - Soit avoir dans la classe observée un booléen pour chaque donnée modifiable et le positionner à vrai quand la donnée change, ainsi la vue teste chaque booléen pour savoir quelle donnée doit être rafraichie : Cette solution est moins couteuse en temps mais lourde à cause de la présence et de la gestion d'un booléen pour chaque donnée observable.

    Les exemples que j'ai pu trouver sont triviaux et ne gère à chaque fois qu'une seule donnée. La question de plusieurs données observées dans une même classe ne se posait donc pas.

    Avez-vous une solution à mon problème ? Dans une meilleure utilisation du pattern Observateur ou dans l'utilisation d'une autre méthode pour découpler au maximum le traitement des données et leur représentation...?

    Merci par avance pour vos réponses.

  2. #2
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Citation Envoyé par Guyiom Voir le message
    Prenons une classe du modèle qui contient 5 données affichées dans la vue.
    Une des données est modifiée et la classe notifie ses observateurs qu'il y a un changement.
    La classe notifie les observateurs en précisant la données qui a été modifiée (ainsi que l'ancienne et la nouvelle valeur par exemple), car c'est dans son champs de connaissance.

    Le même problème se pose lors d'une collection (un ensemble de valeurs). C'est de la responsabilité de la collection de signifier de façon la plus circonstanciée possible les observateurs du changement.

    Quel langage utilises-tu ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    La classe notifie les observateurs en précisant la données qui a été modifiée (ainsi que l'ancienne et la nouvelle valeur par exemple), car c'est dans son champs de connaissance.
    Indiquer l'ancienne et la nouvelle valeur serait assez lourd et indigeste à mettre en place à mon sens, surtout si plusieurs valeurs sont à mettre à jour dans la même notification. Par contre je serais sur la bonne voie en utilisant un booléen pour chaque valeur modifiable ? Ainsi la vue testerait chaque booléen pour savoir quelle(s) valeur(s) a été modifiée(s) dans le modèle. Par contre, pour une table qui représenterait une collection, il me semble finalement plus simple de tout réafficher plutôt que de chercher à ne rafraichir que la ou les données modifiées dans la collection.

    Quel langage utilises-tu ?
    Windev... et on ne rigole pas au fond ! C'est un très bon environnement de développement, certes limité dans le developpement objet par rapport aux langages full objet, mais on peut faire quand même pas mal de choses avec.
    Pour le pattern Observateur, je me suis appuyé sur son diagramme que l'on retrouve un peu partout et sur son implémentation en Java (langage que j'ai pratiqué dans le passé) ..... mais je n'ai pas toutes mes réponses quant à son utilisation, d'où mes interrogations ici.

    Si d'autres personnes peuvent apporter leur expérience dans l'utilisation de ce pattern...

Discussions similaires

  1. Aide dans la mise en place d'une solution.
    Par soundsp dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/01/2010, 08h11
  2. question sur la mise en place d'une architecture glpi oracle
    Par sousoujda2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/08/2008, 16h07
  3. [HTML] pb de mise en place d'une balise <div> dans des balises <ul>
    Par youp_db dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 06/11/2006, 16h57
  4. Réponses: 2
    Dernier message: 05/04/2006, 11h43

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