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 :

ext-GWT (GXT) et pattern MVP


Sujet :

GWT et Vaadin Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 21
    Points
    21
    Par défaut ext-GWT (GXT) et pattern MVP
    Bonjour,

    Je souhaite utiliser le composant GRID de ext-GWT (GXT) dans une architecture MVP. Dans l'initialisation de ma View j'ai besoin d'instancier la Grid pour la rajouter à la vue. Mais pour instancier une Grid ext-GWT, il faut préciser le ListStore et le ColumnModel. Or ces objets sont plutôt à créer du côté du Presenter selon moi puisqu'ils dépendent du modèle...et que la vue ne doit pas avoir connaissance du modèle.

    final Grid<BeanModel> grid = new Grid<BeanModel>(store, cm);

    Avez-vous une solution pour répondre à cette problématique ?

    Merci d'avance pour vos retours !

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 21
    Points
    21
    Par défaut Incompatibilité entre pattern MVP et librairie EXT-GWT (GXT) ?
    J'ai l'impression que le pattern MVP n'est pas compatible avec la librairie EXT-GWT (GXT) ?

    La création des composants GXT est souvent complexe est difficilement séparable entre VUE et PRESENTER.

    De plus, MVP spécifie une interface Display avec des handlers alors que GXT utilise des listeners.

    Avez-vous des avis sur le sujet ?

    Merci pour vos retours !

  3. #3
    Membre averti
    Profil pro
    Lead Tech Agile
    Inscrit en
    Septembre 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Lead Tech Agile

    Informations forums :
    Inscription : Septembre 2004
    Messages : 316
    Points : 417
    Points
    417
    Par défaut
    Je pense que GWT ce suffit. Tu peux déjà faire tout ce dont tu as besoin. GXT est trop lourd à mon gout.

  4. #4
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Bien que je n'ai pas encore regardé en détails comment faire du mvp avec gxt, je me posais la même question. En lisant ta question, je me suis aussi dit qu'il devrait être difficile d'avoir ma view qui implémente l'interface de mon presenter. Une solution pourrait être d'étendre la vue afin d'implémenter l'interface voulue. Par contre, ça ne résoud pas le problème de la gestion interne des données.
    Je pense que le problème ne se pose pas uniquement avec gxt mais également avec d'autres framework comme smartgwt, car ils possèdent le plus souvent des fonctionnalités avancées comme le tri de données sur un tableau. Au final, c'est dommage car ce sont des framework qui ont des composant plutôt esthétique. A voir si les licences permet de pomper uniquement la UI.
    Tout ça m'amène à me demader, s'il existe un framework de composants uniquement graphique et qui pourrait ainsi s'interfacer avec mvp ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Oui, j'ai l'impression que soit il faut partir sur du GXT + GXT MVC, soit il faut partir sur du GWT standard avec MVP. Mais mieux vaut ne pas essayer de mélanger les deux. Je me trompe ?

    Comme l'objectif est de faire des applis métiers, les composants GXT semblent indispensables...donc GXT MVC ???

  6. #6
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2008
    Messages : 63
    Points : 109
    Points
    109
    Par défaut
    Sur le site, de mvp4 (un framework mvp pour gwt), il y a un exemple de code avec GXT, c'est donc possible :

    http://code.google.com/p/mvp4g/sourc...eeAdminWithGXT

  7. #7
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par jca38 Voir le message
    Oui, j'ai l'impression que soit il faut partir sur du GXT + GXT MVC, soit il faut partir sur du GWT standard avec MVP. Mais mieux vaut ne pas essayer de mélanger les deux.
    J'aurai tendance à être de cet avis mais comme je ne me suis pas penché sur le pattern MVP, je ne saurai dire s'il peut être ou non adapté facilement à GXT.


    Concernant GXT, mon avis est mitigé.
    Certains jours où je peste contre ce framework, j'aurai tendance à être de l'avis de pvoncken et à faire du pur GWT.
    D'autre jours, l'uniformité et la richesse des composants graphiques de GXT est quand même bien sympathique et on se rend compte que redévelopper en GWT l'équivalent a un coût (pour avoir un graphisme aussi bien léché).

    Quitte à se passer de GXT, mieux vaut donc le faire dès le début.
    Une fois qu'on utilise beaucoup de leurs composants, c'est plus difficile.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  8. #8
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Personnellement, je viens de me mettre à GWT.. et j'ai rapidement intégré GXT.
    Pourquoi, car il me permettait d'obtenir rapidement avec un faible coût un interface homogène.
    Maintenant mon application ne nécessite pas (pour le moment) de chose hyper compliquées en terme d'ergonomie. et GXT répond à tout mes besoins..

    Cordialement,
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 50
    Points
    50
    Par défaut
    Le plus gros soucis que j'ai avec GXT c'est qu'il peut rendre des choses qui paraissent simple extrêmement fastidieuse. Après ce n'est peut être qu'une impression.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Ben, de ce que j'ai compris jusqu'à présent:

    Dans la grille Grid (GXT), le ListStore représente la collection d'objets affichée dans la grille. Cette collection est "data-binded". Ca veut dire que si tu utilises la référence de cette collection et que tu en modifies le contenu, l'affichage dans ta grille (Grid) va également se mettre à jour.

    => Une solution pour ton MVP:

    Tu déclares une interface java représentant ton composite GXT (qui contient ta grille) et tu déclares une méthode getStore() qui remballe la référence de ta ListStore ou une méthode getGrid() qui remballe la référence de ta grid (GXT).

    Après, ben c'est simple => soit tu utilises:
    getStore() pour faire tes manips
    ou grid.getStore() pour faire les mêmes manips

    Comme ça, tu peux avoir une couche qui représente ta vue (l'interface java avec les méthodes d'accès aux éléments graphiques)

    Tu peux avoir ton modèle dans une autre couche (les types d'objets que tu utiliseras au sein de la ListStore par exemple)

    Et tu peux enfin avoir une couche de présentation (qui jouera le rôle de contrôleur entre la vue - via l'interface java et le modèle - en manipulant le ListStore dans le Presenter et pas ailleurs)

  11. #11
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Oui benwit; Tu pose là le vrai dilemme, bosser purement avec GWT serait un calvaire si l'on veut reprendre les interfaces de GXT. Si toi tu avais une de grande envergure application nécessitant des interface complexes. Tu pencherais pour quel technologie. Du pur GWT ou GXT ?

  12. #12
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    [QUOTE=jca38;5399144]Bonjour,

    Je souhaite utiliser le composant GRID de ext-GWT (GXT) dans une architecture MVP. Dans l'initialisation de ma View j'ai besoin d'instancier la Grid pour la rajouter à la vue. Mais pour instancier une Grid ext-GWT, il faut préciser le ListStore et le ColumnModel. Or ces objets sont plutôt à créer du côté du Presenter selon moi puisqu'ils dépendent du modèle...et que la vue ne doit pas avoir connaissance du modèle.

    final Grid<BeanModel> grid = new Grid<BeanModel>(store, cm);

    Avez-vous une solution pour répondre à cette problématique ?


    Je ne sais pas comment ça se passe, mais tout ce que je sais Jca38 c'est que c'est possible de faire du MVC avec GXT. Selon le programme de formation publier sur le site de Sencha. . Lorsque tu y sera, va jusqu'en bas et au niveau du module de formation :ExtGWT201 - Ext GWT Fundamentals, tu verra le lien Show Details et lorsque tu clique sur ce lien, tu as le détail de la formation, l'un des point abordé c'est "MVC Architecture"

  13. #13
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par mesken Voir le message
    Oui benwit; Tu pose là le vrai dilemme, bosser purement avec GWT serait un calvaire si l'on veut reprendre les interfaces de GXT. Si toi tu avais une de grande envergure application nécessitant des interface complexes. Tu pencherais pour quel technologie. Du pur GWT ou GXT ?
    Si tu veux de la flexibilité pour t'adapter à une charte graphique donnée, du pur GWT est probablement la meilleure solution. De même si tu veux développer un site avec une identité visuelle qui t'est propre. Maintenant, cela oblige tout un travail de graphiste pour faire un look homogène et réussi.

    Si le look fourni par GXT (Ext-Js) te convient (c'est vrai qu'il est bien, sobre, homogène, ...) tu gagneras en temps car cette extension propose de riches composants pour faire des applications de gestion.

    A toi de choisir en fonction de tes besoins.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  14. #14
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par mesken Voir le message
    Je souhaite utiliser le composant GRID de ext-GWT (GXT) dans une architecture MVP. ...
    1) Rappel sur les patterns
    Pour moi, on ne doit pas appliquer un pattern pour appliquer un pattern (l'appliquer sans le savoir et le reconnaitre ensuite serait sans doute préférable) L'objectif premier est de séparer les responsabilités pour ne pas avoir un code fourre tout où tout est lié à tout. L'objectif est d'avoir différentes parties découplées, qui ont chacune une responsabilité.

    2) Rappel des différences MVC/MVP :
    Dans le MVC, il y a des relations entre chacune des parties.
    (http://upload.wikimedia.org/wikipedi.../ModeleMVC.svg)

    Dans le MVP, la vue ne communique pas directement avec le modèle mais passe par son présentateur. Le présentateur est "au milieu", il joue le rôle du contrôleur du MVC (capture des évènements de la vue) et assume également la mise à jour des données affichées dans la vue.
    Pour limiter la forte dépendance entre la vue et le présentateur, le présentateur peut utiliser une interface (qui sera implémentée par la vue)


    3) Concernant GXT

    Initialement, GXT a plus été conçu dans le cadre du MVC (Il y a une base d'implémentation de MVC dans GXT mais je n'ai pas utilisé)
    L'intégration des composants GXT dans un cadre MVP est donc une problématique intéressante. Reste à voir si leur architecture est assez souple pour pouvoir s'y adapter (Leurs constructeurs sont assez rigide et ils pourraient être bloquant).

    Je n'ai pas trop réfléchi à la question mais je dirai à chaud :
    Le MVC peut être vu à plusieurs niveaux :
    - Au niveau de ton interface graphique (et là tu peux le remplacé par du MVP)
    - Au niveau des composants GXT eux même (comme il y a un pseudo MVC dans les composants graphiques Swing).
    Je dirai donc que les (ListStore, ColumnModel) font parti du modèle du MVC du composant Grid. Ils peuvent être donc mis dans ta vue. Ils seront en revanche alimenté via ton Presenteur (qui lui seul a connaissance de ton modèle de ton ihm (différent du modèle du composant Grid)).

    Je ne sais pas si j'ai été clair ?
    Si un développeur a utilisé une grille GXT dans une architecture MVP, son retour d'expérience serait intéressant à entendre.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Pour ma part, quand je développe une interface graphique:

    1. une classe représente ma "view" - la partie graphique (interface bète et méchante)
    cette classe implémente une interface qui donne accès aux éléments graphiques que je voudrai manipuler ailleurs (dans mon presenter)

    2. une classe représente mon "model" (modèle de données)
    cette classe implémente une interface donnant la liste des setters/getters/adders/removers

    3. une classe représente mon "presenter"
    cette classe connaît les interfaces java représentant ma "view" et mon "model"
    c'est dans la classe "presenter" que je fais les vrais liens entre ma "view" et mon "model"

    Maintenant, il m'arrive d'avoir un peu de code dans mon implémentation de ma "view"; par exemple des listeners propres à un comportement purement graphique.

    j'essaie de dissocier au maximum: présentation graphique et son comportement de la manipulation des données

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Points : 22
    Points
    22
    Par défaut
    Pour répondre à ton problème, oui il est possible d'alimenter une grid dans GWT en séparant le code View du code métier. Comment ? exemple

    Grid = new Grid(controller.getData(), controller.getColumnModel);

    ou bien à l'inverse tu passe une référence à ton controller

    //code controller :

    grid.getColumnData() = data;
    grid.getColumnModel() = cm;

    Voila, bon c'est juste un exemple conceptuel a ne pas prendre au mot près

    gronoblog.blogspot.com

  17. #17
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    Que dites vous de Java Server Faces combiné à Ajax où on maîtrise son code et ses objets et on peut faire ce qu'on veut par rapport à GWT et GXT où l'un est un peut limité tant en objets qu'en passage de Java à JavaScript et l'autre apporte des milliers de librairies qu'on ne maitrise toujours pas et où modifier pour faire ce qu'on veut faire est souvent un peu difficile

    je me suis suis pas encore décidé.

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    utilise le pattern Builder pour produire tes grid

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut exemple d'utilisation GXT3 + pattern MVP
    Un excellent tutorial pour utiliser GXT3 et le pattern MVP (attention GXT3 ne propose plus de modèle MVC spécifique contrairement à GXT2) :
    http://vivagwt.blogspot.fr/2012/07/g...-and-gxt3.html

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/09/2010, 10h33
  2. EXT-GWT 2.0M2 est disponible !
    Par benwit dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 21/05/2009, 23h04
  3. Spring, Hibernate, GWT et Ext GWT
    Par bj304075 dans le forum Spring
    Réponses: 1
    Dernier message: 27/03/2009, 17h06
  4. [AJAX] GWT ou Ext-GWT
    Par nicorama dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 17/11/2008, 09h50

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