2010-04-01 13 views
12

Ich lerne gerade GWT, also versuche ich immer noch, alle seine Macken und Funktionen zu sortieren. Ich lese durch das Beispiel, das sie geben und das MVP-Muster illustrieren, und ich verstehe es ziemlich genau, außer dass ich mich über eine Sache wundere.Skalierung von gwts "Kontakten" (Beispielprojekt) AppController mit MVP

Der von ihnen verwendete AppController implementiert die Schnittstelle ValueChangeHandler und die Methode onValueChange wird ausgelöst, wenn sich der Verlauf ändert.

Mein Problem ist mit diesem onValueChange im AppController (ich habe es unten für jeden, der das Beispielprojekt nicht gesehen hat). Es führt einen Zeichenfolgenvergleich auf dem geschickten Verlaufstoken durch und instanziiert den entsprechenden Moderator, um die Aktion zu bearbeiten. Das ist alles gut und schön für die Beispiel-App mit 3 Aktionen, aber wie würde man dies zu einer echten App mit vielen weiteren Aktionen skalieren?

Die Einhaltung dieses Musters würde zu einem ziemlich großen/hässlichen else if führen, aber ich bin immer noch zu neu für GWT (und Java), um ein besseres Muster für größere Apps abzuleiten.

Jede Hilfe wird sehr geschätzt!

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); 
     } 
    } 
    } 
} 

Antwort

6

Sie heben einen gültigen Punkt mit groß angelegten GWT-Anwendung. Kürzlich habe ich an der über 50.000 GWT-Portal-App gearbeitet und wir werden in Ereignissen und komplexen Switch/Handler-Mustern begraben. Es gibt einen guten Blog-Beitrag zur Verfügung here, der beschreibt, wie schrecklich das werden kann und auch Hinweise auf eine Lösung (siehe schreckliche Fußnote).

Allerdings vereinfacht die neue GWT2 UIBinder und MVP Funktionalität die Dinge. Tatsächlich hat der Autor des oben erwähnten Blogposts über das places Framework geschrieben (welches ein Teil von GWT 2.1 ist) here.

0

Das einzige Ereignis, das die onValueChange-Methode empfangen sollte, ist die "Ansicht ändern". Wenn man bedenkt, dass jede Bedingung 1 Zeile ist, wird es nie so groß sein. Am Ende wird es Ihnen gut gehen, dieses Muster zu verwenden.

Wie Lars schon sagte, ist die Kombination von UiBinder mit dem MVP-Muster einfach und wird die Anzahl der Codezeilen erheblich reduzieren und Ihren Code einfacher modifizieren.