Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数据对象中注册侦听器是一个好主意还是应该使用事件总线?_Java_Gwt - Fatal编程技术网

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

    };
}