GWT RequestFactory, как реализовать DTO результатов запроса - PullRequest
2 голосов
/ 23 августа 2011

У меня есть большая реализация GWT-RPC, и на самом деле я оцениваю альтернативу для перехода на RequestFactory.Основная причина, по которой я это делаю, заключается в том, что я не очень доволен решением TypeSerializer, которое производит GWT-RPC, и огромным размером кода, генерируемого для сериализации / десериализации, который фактически представляет в моем случае более 60% всегоРезультирующий код JS.

Итак, в течение недели я читал все о requestFactory, и мое первое впечатление состояло в том, что API ограничен управлением постоянными сущностями, но не ясно показывает, как API будет поддерживатьРезультаты запроса Proxys.

Я читал, что это можно сделать с помощью ValueProxy, но я не смог найти хорошего примера для этого.Я имею в виду, что мне нужно предоставить рейтинг продаж 10 лучших клиентов за последний месяц.Подобную информацию легко предоставить через 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 Ответ

1 голос
/ 24 августа 2011

Просто используйте ValueProxy вместо EntityProxy, и вы превратите RequestFactory в механизм "простого RPC", подобный GWT-RPC.

Proxy:

@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
}
...