GWT RequestFactory,如何实现查询结果DTO

时间:2011-08-23 16:25:24

标签: gwt gwt-rpc requestfactory

我有一个很大的GWT-RPC实现,实际上我正在评估移动到RequestFactory的替代方案。 我这样做的基本原因是因为我对GWT-RPC产生的TypeSerializers解决方案不满意,并且为序列化/反序列化生成的巨大代码大小实际上代表了我整个案例的60%以上JS结果代码。

因此,有一周我一直在阅读有关requestFactory的所有内容,我的第一印象是API仅限于持久实体的管理,但它没有清楚地显示API将如何支持查询结果Proxys。

我读到可以通过使用ValueProxy来完成,但我找不到任何这样做的好例子。 我的意思是,我需要提供上个月十大客户的销售排名。 像这样的信息很容易通过RPC提供,但是使用RequestFactory我不确定。 我没有任何域对象代理。

通过GWT-RPC我将有一个服务方法,如:

List<ClientRankingDTO> getClientRanking(String clientCode, Date fromDate, Date untilDate);

我的ClientRankingDTO将如下所示:

public class ClientRankingDTO implements Serializable {

    private String clientCode;
    private String clientDescription;
    private Integer rankingPosition;
    private BigDecimal amount;
    // Getters and setters are hidden for simplicity
}

因此,在我的DAO层,我将在SalesStatistics域模型实体上有一些方法来计算相应的排名,并生成ClientRankingDTO列表以及相应的结果。

这可以通过简单的查询来完成,如:

Select top 10 client_code, sum(amount) from sales_stats A 
       where A.sales_date>=fromDate 
         and A.sales_date<=untilDate 
group by client_code
order by amount desc

使用您选择的ORM实施。

我的问题是我如何使用RequestFactory实现这种服务?

1 个答案:

答案 0 :(得分:1)

只需使用ValueProxy代替EntityProxy,然后将RequestFactory转换为“简单RPC”机制,类似于GWT-RPC。

代理:

@ProxyFor(ClientRankingDTO.class)
interface ClientRankingProxy extends ValueProxy {
  // getters for the properties, no need for setters if it's only server-to-client
}

然后,在RequestContext(客户端):

Request<ClientRankingProxy> getClientRanking(String clientCode, Date fromDate, Date untilDate);

在服务器端的服务中:

public ClientRankingDTO getClientRanking(String clientCode, Date fromDate, Date untilDate) {
  // your request to the database, mapping the result to ClientRankingDTO
}