260 likes | 609 Views
GWT Model – View – Presenter & Command pattern. Michał Sędzielewski. O mnie słów kilka. Zainteresowania:. Software Developer. Agenda. Java i co dalej? GWT + MVP gwt – presenter gwt – dispatch Przykład Narzędzia Zasoby. Java i co dalej?. MVC - MVP.
E N D
GWT Model – View – Presenter& Command pattern Michał Sędzielewski
O mnie słów kilka Zainteresowania: Software Developer
Agenda Java i co dalej? GWT + MVP gwt – presenter gwt – dispatch Przykład Narzędzia Zasoby
Model – View - PresenterPresenter - decoupling Zwracamy interfejsy, nie widgety – testowalność, view decoupling publicinterface Display{ Button getLoginButton(); HasClickHandler getLoginButton(); CheckBox getRememberMeCheckBox(); HasValue<boolean> getRmbrMeChBx(); }
Model – View - PresenterPresenter – komunikacja – DOM events Presenter odpowiada za „logikę” aplikacji display.getLoginButton().addClickHandler(new LoginClickHandler()); class LoginClickHandler implements ClickHandler { @Override public void onClick(ClickEvent event){ ... }; }
Model – View - PresenterPresenter - komunikacja • Definiujemy własne zdarzenia (extends GwtEvent) • Presentery nasłuchują na dane zdarzenie • Presentery wywołują zdarzenia eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandlerImpl())); eventBus.fireEvent(new LoginEvent(true));
View - implementacja publicclass LoginView extends Composite implements LoginPresenter.Display { ... }
Command pattern- idea GWT-RPC (3 klasy) • LoginService • LoginServiceAsync • LoginServiceImpl Problemy: • Caching • Dodatkowe parametry
Command pattern - client dispatcher.execute(new LoginAction(username), new AsyncCallback<LoginActionResult>() { @Override publicvoid onFailure(Throwable e) {} @Override publicvoid onSuccess(LoginActionResult result) {} }
Command pattern - server @Component public class LoginActionHandler implements ActionHandler<LoginAction, LoginActionResult> { @Override public LoginActionResult execute(LoginAction action) throws ActionException { // validation returnnew LoginActionResult(true); } @Override public Class<LoginAction> getActionType() { return LoginAction.class; } }
Google GIN • Dependency Injection dla GWT • „Język angielski” • Pozwala na łatwą konfigurację globalnych usług (EventBus, Dispatcher)
Google GIN - MVP 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 • Lazy loading • GWT Async GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { // load lazy } ... });
Zalety ww architektury • Rozszerzalność • Zarządzalność
Linki • http://code.google.com/webtoolkit/articles/mvp-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
Future Processing Academic Days http://www.future-processing.com/fpad 27 maja 2010, godzina 14:00 Aula D, Wydział AEI, Politechnika Śląska