Transcript GWT Model – View - Presenter
Michał Sędzielewski
Software Developer Zainteresowania: GWT TDD, BDD Agile (XP) Spring Framework Groovy on Grails
1. Java i co dalej?
2. GWT + MVP 3. gwt – presenter 4. gwt – dispatch 5. Przykład 6. Narzędzia 7. Zasoby
Presenter
server callback event bus
Presenter
zdarzenia DOM
Presenter - decoupling
Zwracamy interfejsy, nie widgety – testowalność, view decoupling
public interface
Display{ Button getLoginButton(); HasClickHandler getLoginButton(); CheckBox getRememberMeCheckBox(); HasValue
Presenter – komunikacja – DOM events
Presenter odpowiada za „logikę” aplikacji display.getLoginButton().addClickHandler(
new
LoginClickHandler());
class
LoginClickHandler
implements
ClickHandler { @Override
public void
onClick(ClickEvent event){ ...
}; }
Presenter - komunikacja
EventBus
Presenter - komunikacja
Definiujemy własne zdarzenia (
extends
Presentery nasłuchują na dane zdarzenie GwtEvent) Presentery wywołują zdarzenia eventBus.addHandler(LoginEvent.TYPE
, new
LoginEventHandlerImpl())); eventBus.fireEvent(
new
LoginEvent(true)
);
View
i18n implementuje interface presentera View UI binder / Java
public class
LoginView
extends implements
Composite LoginPresenter.Display { ...
}
GWT-RPC (3 klasy) - LoginService - LoginServiceAsync - LoginServiceImpl Problemy: - Caching - Dodatkowe parametry
dispatcher.execute(
new new
LoginAction(username), AsyncCallback
public void
onFailure(Throwable e) {} @Override
public void
result) {} onSuccess(LoginActionResult }
@Component
public class
LoginActionHandler
implements
ActionHandler
public throws
LoginActionResult execute(LoginAction action) ActionException { // validation
return new
LoginActionResult(true); } } @Override
public
Class
return
LoginAction.class; }
Caching Security token Batching Rollback Testing
Dependency Injection dla GWT „Język angielski” Pozwala na łatwą konfigurację globalnych usług (EventBus, Dispatcher)
bind(EventBus.class).to(DefaultEventBus.class) .in(Singleton.class); bindPresenter(AppPresenter.class, AppPresenter.AppDisplay.class, AppView.class); @Inject
public
LoginPresenter(LoginDisplay display, EventBus eventBus, DispatchAsync dispatcher) { ...
}
Lazy loading GWT Async GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { } // load lazy }); ...
Rozszerzalność Zarządzalność
http://code.google.com/webtoolkit/articles/mv p-architecture-2.html
http://code.google.com/p/gwt-dispatch/ http://code.google.com/p/gwt-presenter/ http://code.google.com/p/gwt-platform/ http://code.google.com/p/mvp4g/ http://james.apache.org/hupa/index.html
?
Eclipse Maven Hudson 27 maja 2010, godzina 14:00 Aula D, Wydział AEI, Politechnika Śląska http://www.future-processing.com/fpad