GWT RequestFactory和多种类型

Ril*_*ark 6 gwt requestfactory

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

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

有没有办法制作GeneralRequestContext,还是什么?我甚至对以下解决方案感到满意:

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

public interface GeneralRequestContext extends RequestContext
{
    Request<InitDataProxy> getInitData();
}
Run Code Online (Sandbox Code Playgroud)

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

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

我也很乐意为这个数据制作一个普通的gwt-rpc请求到RequestFactory之外,但是我不想在RequestFactory的代理旁边实现重复的DTO,并编写自定义代码来将DTO复制到他们!

Bob*_*obV 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();
}
Run Code Online (Sandbox Code Playgroud)

  • RequestContext 可以被视为“方法调用包”,它允许您在单个 HTTP 请求中对它们进行批处理。这意味着您不必将结果合并为单一类型;您可以在 RequestContext 上调用多个方法,然后才 fire() 它将方法调用作为“批量”发送到服务器。 (4认同)