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

GWT et Vaadin Java Discussion :

Petite question d'architecture


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 78
    Par défaut Petite question d'architecture
    Bonjour je souhaiterais avoir votre avis sur la question suivante.
    Dans un projet GWT/AppEngine j'ai côté serveur un objet persistant (Objectify) de classe A qui comporte une collection d'objets de classe B. Cet objet doit être rapatrié côté client.

    A {
    @Id public Long id;
    public List<B> bs;
    }

    B {
    @Id public Long id;
    ...
    }

    Sachant que le nombre d'objets B va sans cesse augmenter, est-ce que le découpage ci-dessus est correct, ou vaut il mieux faire quelque-chose comme suit :


    A {
    @Id public Long id;
    public List<Long> bIds; // Id de B
    }

    B {
    @Id public Long id;
    ...
    }

    Et du coup, les objets B seraient rapatriés à la demande via un service.

    Merci d'avance !

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Bonjour cereal, voici mon ressenti sur ton problème.

    Je pense que les deux solutions dépendent de ta situation.
    Maintenant, pour une utilisation standard, je préconiserai la première car tu ramènes tout d'un coup. Il faut voir que dans les deux cas, tu voudras récupérer tes objets B, donc entre tout ramener d'un coup (1ère solution = 1 appel serveur) et les ramener en 2 fois (2ème solution = 2 appels serveur), je pense qu'il est préférable d'utiliser la première technique pour la performance.

    Après généralement l'utilisateur n'a pas besoin d'obtenir un nombre de résultats affolants, il cherche juste une partie spécifique des données de la base de données. Du coup, il faut savoir spécifier les objets B retournés en fonction de critères éventuellement fournis par l'utilisateur.

    J'espère être clair,
    Hope it helps.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 78
    Par défaut
    Je comprends la problématique du nombre d'appels serveur, mais ce qui me pousse à me poser la question c'est le cas de figure suivant :

    Imaginons que l'objet A possède une List<B> de 100000 enregistrements. Si J'ai uniquement besoin des données de A, je suis tout de même obligé de faire transiter les 1000000 enregistrements de B et de les avoir constamment en mémoire vive...
    N'est-ce pas un peu plus gourmand que de faire éventuellement un 2ème appel serveur lorsque j'ai besoin de B ?

  4. #4
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Et bien soit tu mets en place du lazy loading sur la list d'objets B pour que le chargement n'est lieu que si on accède à cette liste.
    Sinon il faut mettre en place de la pagination, potentiellement sur la base de données, ce qui entraine l'implémentation d'une méthode spécifique pour récupérer un liste d'objet B en relation avec A.


    Sinon au minimum il faut que l'objet B connaisse son objet A pour manipuler B.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    A {
    @Id public Long id;
    }
     
    B {
    @Id public Long id;
    @Id public A a;
    ...
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 78
    Par défaut
    Je pensais effectivement à la dernière solution que tu proposes, mais on est plus vraiment dans l'approche base de données objet. Est-ce qu'une telle méthode est vraiment viable et "professionnelle" ou est-ce un peu "artisanal" ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut
    A mon sens c'est tout l’intérêt de GWT et de l'approche 2.0 à opposer à l'approche Struts JSP R/O

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Citation Envoyé par cereal Voir le message
    Je comprends la problématique du nombre d'appels serveur, mais ce qui me pousse à me poser la question c'est le cas de figure suivant :

    Imaginons que l'objet A possède une List<B> de 100000 enregistrements. Si J'ai uniquement besoin des données de A, je suis tout de même obligé de faire transiter les 1000000 enregistrements de B et de les avoir constamment en mémoire vive...
    N'est-ce pas un peu plus gourmand que de faire éventuellement un 2ème appel serveur lorsque j'ai besoin de B ?
    Si tu sais déterminer dans le code dans quel cas tu ne veux pas ta liste, tu mets ta liste à "null" avant de la traiter.
    Si tu ne sais pas identifier ce cas, tu peux en effet utiliser le principe du lazy loading avec Hibernate mais il faut que tu utilises Hibernate dans ton projet.

    En gros, avec le lazy loading (lazy=true), si tu veux récupérer ta liste, tu fais un "getListe()" sur ton objet A et tu récupères ta liste par le biais d'une requête Hibernate ; si tu ne veux pas récupérer ta liste, tu ne fais pas de "getListe()" sur ton objet A et aucune requête ne sera envoyée et tu n'auras pas ta liste.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut
    Une autre solution, si les objets B sont "Volumineux". Rapatrié ton objet A avec la liste des Ids. Aller chercher tes objets B 1 part 1 à la demande.

Discussions similaires

  1. Petite question sur l'architecture d'une application
    Par Mozofeuk dans le forum Architecture
    Réponses: 1
    Dernier message: 01/09/2010, 18h55
  2. [Création d'un moteur] Petite question d'architecture technologique
    Par ludovic85 dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 07/02/2007, 18h00
  3. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  4. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 16h35
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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