2011-02-11 10 views
6

Moja aplikacja GWT zawiera dziesięć różnych rodzajów obiektów. W tej chwili używam zwykłych starych DTO i transportuję je na GWT-RPC. Działa to dobrze w takich przypadkach, jak uruchamianie - mogę je wszystkie spakować w jedno żądanie.GWT RequestFactory i wiele typów

Szukam przejścia na RequestFactory, ponieważ jest wiele razy w całym okresie użytkowania aplikacji (średnio 30 minut), kiedy muszę tylko aktualizować jeden typ obiektu, a także funkcje unifikacji/oszczędzania przepustowości RequestFactory są atrakcyjne. ALE: Nie widzę sposobu, aby pobrać wszystkie moje dane inicjalizacyjne w jednym żądaniu po załadowaniu aplikacji. Nie chcę wykonywać dziesięciu żądań, aby pobrać wszystkie dane init dla moich dziesięciu typów jednostek.

Czy istnieje sposób, aby utworzyć GeneralRequestContext, czy coś takiego? Byłbym nawet zadowolony z takiego rozwiązania:

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

public interface GeneralRequestContext extends RequestContext 
{ 
    Request<InitDataProxy> getInitData(); 
} 

Ale to nie będzie działać, bo nie chcą mieć z powrotem do rzeczywistości InitDataProxy z niczego, po prostu chcę go używać, aby połączyć kilka różne typy serwerów proxy w jednym żądaniu.

Tak: Czy istnieje sposób na otrzymanie wielu niepowiązanych typów EntityProxy w jednym żądaniu?

Byłbym również szczęśliwy, robiąc normalne żądanie gwt-rpc, aby wyjść poza RequestFactory dla tych danych, ale nie chcę wykonywać duplikatów DTO, aby działać obok proxy RequestFactory i pisać niestandardowy kod skopiować do nich DTO!

Odpowiedz

4

Zamiast tego może zostać przedłużona InitDataProxy, co nie wymaga, aby obiekt na serwerze miał jakąkolwiek semantykę typu id lub wersji. Typ domeny-strona InitData może być interfejsem, prawdopodobnie implementowanym z anonimowym typem.

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

Ah, świetnie. Dzięki - dzięki temu liczba przeszkód między mną a używaniem RF spada do jednego, i czuję, że również się rozpada! Doceniam twoją pracę! –

+4

RequestContext może być postrzegany jako "torba wywołań metod", która umożliwia grupowanie ich w pojedyncze żądanie HTTP. Oznacza to, że nie trzeba łączyć wyników w jednym typie; możesz wywołać kilka metod w RequestContext i tylko wtedy fire() to wysłać wywołania metody do serwera jako "partia". –

+0

Hej, widziałem to i za chwilę spróbuję tego z ValueProxy. Ale ostatnio eksperymentowałem z ValueProxys (nie pamiętam jednak wersji GWT) GWT wciąż narzeka na klasę, którą oznacza ValueProxy, brakuje domyślnego konstruktora i brakuje metod setera dla właściwości. Zobaczmy, czy działa w aktualnych wersjach :) – Gandalf