【问题标题】:GWT RequestFactory and multiple typesGWT RequestFactory 和多种类型
【发布时间】:2011-06-25 19:54:30
【问题描述】:

我的 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 放入其中!

【问题讨论】:

    标签: gwt requestfactory


    【解决方案1】:

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

    【讨论】:

    • 啊,太好了。谢谢 - 这使我和使用射频之间的突出障碍数量减少到一个,我也觉得它正在崩溃!我很欣赏你的工作!
    • RequestContext 可以看作是一个“方法调用包”,它允许您在单个 HTTP 请求中对它们进行批处理。这意味着您不必将结果合并为单一类型;您可以在 RequestContext 上调用多个方法,然后才 fire() 将方法调用作为“批处理”发送到服务器。
    • 嘿,刚刚看到这个,很快就会用 ValueProxy 试试这个。但上次我尝试使用 ValueProxys(虽然不记得 GWT 版本)时,GWT 一直抱怨 ValueProxy 所代表的类缺少默认构造函数并且缺少属性的 setter 方法。让我们看看这是否适用于当前版本:)
    • @ThomasBroyer 但是如果你在一个 RequestContext 中组合几个方法然后 fire(),那么你如何为每个方法提供一个 Receiver?
    • 每个Request&lt;?&gt; 有一个Receiver 和一个全局Receiver&lt;Void&gt; 用于RequestContext(但那个没有收到任何值,只有一个全局“成功/失败/违反约束”信息)
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多