CDI Eventsが新しいアプリケーションに適しているかどうかを評価しています。これまで私は常に、UI 要素のみを持ち、それらを public getter で公開するMVP
アーキテクチャを使用してきましたが、レジスタはそれらのリスナーをクリックします。View
Presenter
私は周りに来て、クラスCDI Events
のクリックイベントを直接発生させることを考えました..View
observe
Presenters
どちらのアプローチが優れているか教えていただけますか?または、一般的に、他のアプローチよりもどちらかを選択するのはなぜですか?
MVP :
class LoginView {
private Button loginButton;
public void getButton() {
return loginButton;
}
}
class LoginPresenter {
@Inject
private LoginView view;
public LoginPresenter() {
view.getButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
//perform the login business logic
}
});
}
}
CDI イベント:
class LoginView {
private Button loginButton;
@Inject
private Events<LoginEvent> events;
public LoginView() {
loginButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
events.fire(new LoginEvent("login"));
}
});
}
}
class LoginPresenter {
private void listenLogin(@Observes LoginEvent evt) {
//perform the login business logic
}
}
class LoginEvent extends EventObject {
public LoginEvent(String source) {
super();
}
}
(この例ではVaadinを使用していますが、フレームワークの選択は一般的に私の質問には関係ありません)
私にとっての主な違いは次のとおりです。CDI は UI に getter を必要とせず、Presenter にビュー メンバー変数も必要としません。欠点としては、発生するすべてのイベントに対して追加のイベント クラスを作成する必要があります。