我有一个很大的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实现这种服务?
答案 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
}