我在评估是否CDI事件可能对我的新应用程序有意义。到目前为止,我一直使用MVP
体系结构,其中View
仅具有UI元素,并将它们公开在公共getter中,而Presenter
注册会单击它们上的侦听器。MVP - 注册点击监听器或使用CDI事件?
我来到CDI Events
左右,想直接点击View
类中的点击事件,并且在我的Presenters
中只有observe
这些事件。
你能告诉我哪种方法更好吗?或者你为什么总体上选择了另一种方法?
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不需要用户界面的getter,也不需要查看成员变量e发言人。缺点是,我需要为每个要触发的事件创建一个额外的事件类。
原来,我正在寻找。 – membersound