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

Design Patterns Discussion :

Prog. évènementielle, cycle de vie différent de la présentation et des données ? [Observateur]


Sujet :

Design Patterns

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut Prog. évènementielle, cycle de vie différent de la présentation et des données ?
    Bonjour,

    Je m'intéresse à GWT. L'utiliser modifie la manière de gérer les interfaces graphiques puisqu'il fonctionne sur le mode de la programmation évènementielle.

    Pour illustrer la question que je me pose, partant d'un exemple simple : la gestion d'une liste de clients (affichage de la liste des clients, ajout, modification, suppression). Cette liste peut être modifiée par plusieurs utilisateurs simultanément.

    En programmation web non évènementielle, à chaque fois qu'on modifie la liste, on recharge tous les éléments pour réafficher la liste. Je suis donc toujours "à jour" par rapport à la base de données.

    En programmation évènementielle, si j'ajoute un élément, je vais appeler ma couche métier pour lui notifier de l'ajout et ajouter l'élément à ma liste au niveau de l'affichage. D'une certaine manière, mon affichage va évoluer en parallèle des informations persistées. N'est ce pas gênant ? Je ne verrai par exemple pas les ajouts / modifications / suppressions faits par les autres utilisateurs.

    Je me fais peut-être beaucoup de nœuds au cerveau pour pas grand chose, mais :
    Existe-il des bonnes pratiques sur la manière de gérer l'affichage par rapport à la partie métier / persistance ?

    J'espère avoir été clair. Par avance, merci pour vos réponses.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Bonsoir

    une bonne pratique pour la couche présentation c'est d'utiliser le pattern observateur.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Bonsoir,

    Merci hegros pour ta réponse.
    Si je te comprends bien (et pour conserver l'indépendance de la couche métier par rapport à la couche présentation), mes services métiers doivent implémenter une interface (ou classe abstraite) Observable.
    Quand j'ajoute un client, ma couche présentation appelle explicitement le service métier correspondant. Le service métier notifie alors tous les observateurs qu'un client a été ajouté.
    Ai-je bien compris ?

    Merci !

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    oui observable ou subject, il y a une documentation abondante sur le sujet sur le site avec des exemples
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par thomine Voir le message
    Je m'intéresse à GWT. L'utiliser modifie la manière de gérer les interfaces graphiques puisqu'il fonctionne sur le mode de la programmation évènementielle.


    Le principe des interfaces graphiques depuis 30 ans est d'être événementiel !!!!




    Citation Envoyé par thomine Voir le message
    En programmation web non évènementielle, à chaque fois qu'on modifie la liste, on recharge tous les éléments pour réafficher la liste. Je suis donc toujours "à jour" par rapport à la base de données.
    Ce qui est normal, puisque basé sur un protocole (HTML) et non une IHM "normale", c'est à dire événementielle



    Citation Envoyé par thomine Voir le message
    Pour illustrer la question que je me pose, partant d'un exemple simple : la gestion d'une liste de clients (affichage de la liste des clients, ajout, modification, suppression). Cette liste peut être modifiée par plusieurs utilisateurs simultanément.


    En programmation évènementielle, si j'ajoute un élément, je vais appeler ma couche métier pour lui notifier de l'ajout et ajouter l'élément à ma liste au niveau de l'affichage. D'une certaine manière, mon affichage va évoluer en parallèle des informations persistées. N'est ce pas gênant ? Je ne verrai par exemple pas les ajouts / modifications / suppressions faits par les autres utilisateurs.

    Je me fais peut-être beaucoup de nœuds au cerveau pour pas grand chose, mais :
    Existe-il des bonnes pratiques sur la manière de gérer l'affichage par rapport à la partie métier / persistance ?

    J'espère avoir été clair. Par avance, merci pour vos réponses.
    Citation Envoyé par thomine Voir le message
    Bonsoir,

    Merci hegros pour ta réponse.
    Si je te comprends bien (et pour conserver l'indépendance de la couche métier par rapport à la couche présentation), mes services métiers doivent implémenter une interface (ou classe abstraite) Observable.
    Quand j'ajoute un client, ma couche présentation appelle explicitement le service métier correspondant. Le service métier notifie alors tous les observateurs qu'un client a été ajouté.
    Ai-je bien compris ?

    Merci !
    Tout ceci relève d'une vision "objet" de base..

    Chaque utilisateur possède une "vue" sur la base.

    Un élément - physique - dans la base n'a qu'un seul état à un moment donné : il n'existe pas (on le crée), il existe (on le voit), il a été modifié, il a été détruit.

    Ces 4 opérations sont "en bas" de l'échelle, ce sont celles de la base.

    Un utilisateur peut faire ce qu'il veut (si bien sûr il a les droits).

    Une appli à un utilisateur, bien conçue, aura été découpée entre BDD, métier, et IHM.

    Comme dit plus haut, normalement les IHM fonctionnent sur le principe de l'événementiel. Il y aura donc des "méthodes" Get, View, Modify, Destroy, Create.

    MAIS dès que l'on est à plusieurs, les "méthodes" Modify, Destroy, Create nécessitent d'avoir des répercussions en temps réel vers les autres utilisateurs, de même que des mécanismes de synchronisation.

    Dans ce cas-là, il y aura simultanément un dialogue Aller-retour vers la base, plus un "broadcast".

    Et c'est un avantage certain, comme tu le mentionnes : à quoi ça sert de modifier un élément qui a été détruit par quelqu'un d'autre ?

    En conséquence, dans ce genre de schémas, il y a un double étage d'événementiel : au niveau de l'IHM, et au niveau de la BD.

    Le fond de tout est de bien séparer les couches, et d'avoir un dialogue cohérent.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Merci pour vos réponses.

    Ce qui est normal, puisque basé sur un protocole (HTML) et non une IHM "normale", c'est à dire événementielle
    D'où ma question ! Etant surtout habitué au web, je n'ai pas les bons réflexes IHM normale (événementielle quoi !) . Il n'y a (le plus souvent) pas cette notification de changement du modèle à la vue.

    Comme dit plus haut, normalement les IHM fonctionnent sur le principe de l'événementiel. Il y aura donc des "méthodes" Get, View, Modify, Destroy, Create.

    MAIS dès que l'on est à plusieurs, les "méthodes" Modify, Destroy, Create nécessitent d'avoir des répercussions en temps réel vers les autres utilisateurs, de même que des mécanismes de synchronisation.

    Dans ce cas-là, il y aura simultanément un dialogue Aller-retour vers la base, plus un "broadcast".
    C'était là le coeur de ma question, donc merci pour ta réponse ! Par rapport à une appli basée sur HTTP simple, je m'interrogeais sur cette synchronisation et cette répercussion en temps réel des infos.
    Je comprends maintenant mieux comment est géré ce "broadcast" d'infos à partir du DP Observer.

    Le sujet est pour moi résolu ! Merci pour vos contributions.

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    oui observer est utilisable à différent niveau.

    presentation->application

    mais aussi on pourrait l'utiliser comme cela

    application->couche accès aux données


    Soit une notification dans la couche des données notifie l'application qui notifie la présentation and continue...
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

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

Discussions similaires

  1. Model de cycle de vie d'un logiciel
    Par apt dans le forum Méthodes
    Réponses: 4
    Dernier message: 29/10/2014, 23h54
  2. Réponses: 7
    Dernier message: 08/03/2007, 09h23
  3. Réponses: 6
    Dernier message: 07/03/2007, 09h32
  4. Prog évènementielle - graphique
    Par koupon dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/01/2007, 17h32
  5. [EJB Stateful] [Cycle de vie] methode remove()
    Par anitshka dans le forum Java EE
    Réponses: 3
    Dernier message: 05/12/2006, 17h31

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