我的CustomerActivity
类也恰好是MVP意义上的主持人。为了响应用户的操作,下面的代码被称为:在活动中使用GWT的RequestFactory
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处理程序不是更好吗? – jonasr 2011-06-10 08:21:00
我有两个活动正在运行,每个活动都与显示的不同区域有关。一个用于查看/更改客户设置,另一个用于更改客户名称和地址详细信息。也许最好有两个不同的实体:Customer和CustomerSettings。尽管它们构成了一个概念对象的一部分。 – David 2011-06-10 08:58:57