0

CDI Eventsが新しいアプリケーションに適しているかどうかを評価しています。これまで私は常に、UI 要素のみを持ち、それらを public getter で公開するMVPアーキテクチャを使用してきましたが、レジスタはそれらのリスナーをクリックします。ViewPresenter

私は周りに来て、クラスCDI Eventsのクリックイベントを直接発生させることを考えました..ViewobservePresenters

どちらのアプローチが優れているか教えていただけますか?または、一般的に、他のアプローチよりもどちらかを選択するのはなぜですか?

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 にビュー メンバー変数も必要としません。欠点としては、発生するすべてのイベントに対して追加のイベント クラスを作成する必要があります。

4

2 に答える 2