2010-04-01 10 views
12

Estoy aprendiendo GWT, así que todavía estoy tratando de resolver todas sus peculiaridades y características. Estoy leyendo el ejemplo que dan ilustrando el patrón de MVP, y casi lo entiendo, excepto que me pregunto una cosa.Escalando los "contactos" de gwt (proyecto de ejemplo) AppController con MVP

El AppController que utilizan implementa la interfaz ValueChangeHandler y el método onValueChange se activa cuando cambia el historial.

Mi problema es con este onValueChange en el AppController (lo he incluido a continuación para cualquier persona que no haya visto el proyecto de muestra). Está haciendo una comparación de cadenas en el token de historial enviado e instanciando el presentador apropiado para manejar la acción. Todo está muy bien para la aplicación de muestra con 3 acciones, pero ¿cómo se puede escalar esto a una aplicación real con muchas más acciones?

Cumplir con este patrón daría lugar a un gran/feo else if, pero todavía soy demasiado nuevo para GWT (y java) para inferir un mejor patrón para aplicaciones más grandes.

¡Cualquier ayuda es muy apreciada!

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

Respuesta

6

Plantea un punto válido con la aplicación GWT a gran escala. Recientemente trabajé en la aplicación del portal GWT de 50,000+ líneas y estamos enterrados en eventos y patrones complejos de conmutadores/controladores. Hay una buena publicación de blog disponible here que describe cuán terrible puede ser esto y también sugiere una solución (consulte nota al pie terrible).

Sin embargo, la nueva funcionalidad GWT2 UIBinder y MVP simplifica las cosas. De hecho, el autor de la publicación de blog mencionada anteriormente ha escrito sobre el marco places (que es parte de GWT 2.1) here.

0

El único evento que debe recibir el método onValueChange es el de "ver cambio". Teniendo en cuenta que cada condición es 1 línea, nunca va a ser tan grande. Al final, estarás bien usando ese patrón.

Como dijo Lars, la combinación de UiBinder con el patrón MVP es fácil y reducirá en gran medida el número de líneas de código y hará que su código sea más fácil de modificar.

Cuestiones relacionadas