Java 在数据对象中注册侦听器是一个好主意还是应该使用事件总线?
我所说的数据对象是指以下内容: 我有一个类Java 在数据对象中注册侦听器是一个好主意还是应该使用事件总线?,java,gwt,Java,Gwt,我所说的数据对象是指以下内容: 我有一个类CarDescription,它基本上包装并管理一个CarDescriptionDTO对象CardDescription基本上是一个DAO,可以访问StoreServlet,以维护相应的DTO,使其保持最新,并可以将其保存在服务器上 我拥有的是一个汽车列表,我可以点击其中一辆汽车并启动编辑对话框以更改其数据。我不喜欢将已编辑的car对象(此处为CarDescription)传递回初始化编辑对话框的父视图。我可以让“编辑”对话框的演示者来编辑它: // P
CarDescription
,它基本上包装并管理一个CarDescriptionDTO
对象CardDescription
基本上是一个DAO,可以访问StoreServlet
,以维护相应的DTO,使其保持最新,并可以将其保存在服务器上
我拥有的是一个汽车列表,我可以点击其中一辆汽车并启动编辑对话框以更改其数据。我不喜欢将已编辑的car对象(此处为CarDescription
)传递回初始化编辑对话框的父视图。我可以让“编辑”对话框的演示者来编辑它:
// PLEASE NOTE: This is happening in EditCarDescriptionDialogPresenter
// and NOT in AvailableCarsPresenter which is the parent presenter.
@Override
public void onSaveButtonClicked(CarDescription carDescription) {
carDescription.save(new Callback<CarDescription >() {
@Override
public void onSuccess(CarDescription result) {
// Here I'm either notifying the parent(s) AvailableCarsPresenter or
// I'm doing just what EditCarDescriptionDialogPresenter does
// and nothing else depending if I have listeners or not.
}
@Override
public void onFailure(Throwable caught) { }
});
}
我认为这可能有用的原因是,不同的视图可能对数据的更改感兴趣
imho的主要缺点是,每一个对这样一个事件感兴趣的类都必须实现侦听器接口,这可能会也可能不会让人感到痛苦
另一个选择是这里的事件总线,我想,我从一些会谈中知道,建议在GWT项目中使用它——但我不确定在这种特殊情况下是否应该使用它
那么,你是如何解决类似问题的?你能给我推荐些什么
谢谢 只需使用
EventBus
<代码>演示者可以收听特定事件(即CarSavedEvent
)并进行适当处理。只需使用EventBus
<代码>演示者可以收听特定事件(即CarSavedEvent
)并对其进行适当处理。
public void save(final Callback<CarDescription> callback) {
new XsrfRequest<StoreServletAsync, CarDescriptionDTO>(this.storeService) {
@Override
public void onCall(AsyncCallback<CarDescriptionDTO> asyncCallback) {
storeService.saveMealDescription(carDescriptionDto, asyncCallback);
}
@Override
public void onSuccess(CarDescriptionDTO result) {
carDescriptionDto = result;
// Just passing back the managing object:
callback.onSuccess(CarDescription.this);
// This is where I could also do something like this:
/*
for(CarDescriptionListener listener : carDescriptionListenerList) {
listener.onDataChanged(CarDescription.this);
}
*/
}
@Override
public void onFailure(Throwable caught) {
// Only the calling object gets notified.
// Notifying listeners would be pointless.
callback.onFailure(caught);
}
};
}