GWT Model – View - Presenter

Download Report

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

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() { @Override

public void

onFailure(Throwable e) {} @Override

public void

result) {} onSuccess(LoginActionResult }

@Component

public class

LoginActionHandler

implements

ActionHandler { @Override

public throws

LoginActionResult execute(LoginAction action) ActionException { // validation

return new

LoginActionResult(true); } } @Override

public

Class getActionType() {

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