【发布时间】:2011-06-10 18:26:00
【问题描述】:
我的CustomerActivity 班级恰好也是 MVP 意义上的演示者。为了响应用户的操作,调用以下代码:
context.update(customer).fire(new Receiver<CustomerProxy>() {
public void onSuccess(CustomerProxy response) {
// set the view according to the response
}
});
当上面的代码执行时,会发生两件事:
我收到了客户的更新副本,我可以用它刷新视图的状态
一个 EntityProxyChange 事件被触发
CustomerActivity 侦听 EntityProxyChange 事件,因为其他活动也会更改客户记录,我想保持 CustomerActivity 是最新的。
EntityProxyChange.registerForProxyType(eventBus, CustomerProxy.class,
new EntityProxyChange.Handler<CustomerProxy>() {
public void onProxyChange(EntityProxyChange<CustomerProxy> event) {
fetchCustomer(event.getProxyId());
// ...but what if it was me that made the change?
}
});
由于update 方法已经返回了一个最新的客户,我不需要在处理EntityProxyChange 的过程中再次获取客户;如果可以避免的话,我不想承担再次调用服务器的费用。
我希望EntityProxyChange 类能够为我提供实体的版本号,我可以将其与我缓存的客户版本进行比较。没有骰子。
我想我可以设置某种inTheMiddleOfAnUpdateOperation 标志,并在获取客户之前检查它。人们正在这样做吗?这个想法让我有点作呕。您能否建议一种更好的方法来编写一个监听更改并对相同实体类型进行更改的活动?
【问题讨论】:
-
从其他活动中监听客户记录更改的原因是什么?除非我弄错了,否则您一次只能激活一个活动(正在显示)。所以其他活动做什么并不重要。当 CustomerActivity 激活并删除 EntityProxyChange Handler 时检查客户记录的更改不是更好吗?
-
我有两个活动正在运行,每个活动都与显示的不同区域有关。一种用于查看/更改客户设置,另一种用于更改客户名称和地址详细信息。也许最好有两个不同的实体:Customer 和 CustomerSettings。不过,它们确实构成了一个概念对象的一部分。
标签: gwt requestfactory