6

我的 GWT 应用程序有十种不同的实体。现在我使用普通的旧 DTO 并通过 GWT-RPC 传输它们。这适用于像启动这样的情况——我可以将它们全部打包到一个请求中。

我正在考虑切换到 RequestFactory,因为在应用程序的整个生命周期中(平均 30 分钟)有很多次我只需要更新一种类型的实体,并且 RequestFactory 的统一/节省带宽的功能很有吸引力。但是:当应用程序加载时,我看不到在单个请求中下载所有初始化数据的方法。我不想发出十个请求来获取我的十个实体类型的所有初始化数据。

有没有办法制作一个GeneralRequestContext,或者什么?我什至会对这样的解决方案感到满意:

public interface InitDataProxy extends EntityProxy
{
    public UserProxy getInitUsers();
    public OrganizationProxy getInitOrganizations();
    ...
}

public interface GeneralRequestContext extends RequestContext
{
    Request<InitDataProxy> getInitData();
}

但这不起作用,因为我不想用任何东西实际支持 InitDataProxy,我只想用它在一个请求中组合一堆不同类型的代理。

那么:有没有办法EntityProxy在一个请求中接收多个不相关的类型?

我也很乐意为这些数据发出一个正常的 gwt-rpc 请求以在 RequestFactory 之外运行,但我不想实现重复的 DTO 以在 RequestFactory 的代理旁边运行,并编写自定义代码将 DTO 复制到他们!

4

1 回答 1

4

InitDataProxy可以改为扩展,这ValueProxy不需要服务器上的对象具有任何类型的 id 或版本语义。域端InitData类型可以是一个接口,可能用匿名类型实现。

interface InitData {
  User getUser();
  Organization getOrgatization();
}
class InitService {
  static InitData makeInitData() {
    return new InitData() { ..... };
  }
}

@ProxyFor(InitData.class)
interface InitDataProxy extends ValueProxy {
  UserProxy getUser();
  OrganizationProxy getOrganization();
}
@Service(InitService.class)
interface Init extends RequestContext {
  Request<InitDataProxy> makeInitData();
}
于 2011-02-12T15:36:14.977 回答