2010-04-01 5 views
12

Je suis en train d'apprendre GWT donc je suis encore en train de trier toutes ses bizarreries et ses caractéristiques. Je lis l'exemple qu'ils donnent illustrant le modèle MVP, et je l'obtiens à peu près, sauf que je m'interroge sur une chose.Mise à l'échelle « Contacts » (projet exemple) de GWT AppController avec MVP

AppController qu'ils utilisent implémente l'interface ValueChangeHandler et la méthode onValueChange est déclenché lorsque l'histoire change.

Mon problème est avec ce onValueChange dans AppController (je l'ai inclus ci-dessous pour toute personne qui n'a pas vu l'exemple de projet). Il effectue une comparaison de chaîne sur le jeton d'historique envoyé et instancie le présentateur approprié pour gérer l'action. Tout cela est bien et dandy pour l'application exemple avec 3 actions, mais comment serait-on l'échelle d'une application réelle avec beaucoup plus d'actions? S'en tenir à ce modèle conduirait à un else if assez grand/moche, mais je suis encore trop nouveau à GWT (et Java) pour inférer un meilleur modèle pour les grandes applications.

Toute aide est grandement appréciée!

public class AppController implements Presenter, ValueChangeHandler<String> { 

    ... 

    public void onValueChange(ValueChangeEvent<String> event) { 
    String token = event.getValue(); 

    if (token != null) { 
     Presenter presenter = null; 

     if (token.equals("list")) { 
     presenter = new ContactsPresenter(rpcService, eventBus, new ContactsView()); 
     } 
     else if (token.equals("add")) { 
     presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView()); 
     } 
     else if (token.equals("edit")) { 
     presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView()); 
     } 

     if (presenter != null) { 
     presenter.go(container); 
     } 
    } 
    } 
} 

Répondre

6

Vous obtenez un point valide avec une application GWT à grande échelle. J'ai récemment travaillé sur une application de portail GWT de plus de 50.000 lignes et nous sommes enterrés dans des événements et des modèles complexes de commutateurs/gestionnaires. Il ya un bon blog disponible here qui décrit à quel point cela peut devenir terrible et qui suggère aussi une solution (voir terrible note de bas de page).

Cependant, la nouvelle fonctionnalité GWT2 UIBinder et MVP ne simplifie les choses. En fait, l'auteur du billet de blog mentionné ci-dessus a écrit sur le cadre places (qui est une partie de GWT 2.1) here.

0

Le seul événement que la méthode onValueChange doit recevoir est le "changement de vue". Considérant que chaque condition est une ligne, elle ne sera jamais si grande. À la fin, vous serez bien en utilisant ce modèle. Comme l'a dit Lars, combiner UiBinder avec le modèle MVP est facile et réduira considérablement le nombre de lignes de code et rendra votre code plus facile à modifier.

Questions connexes