2011-02-09 14 views
7

Supponiamo che sto lavorando per esporre alcune delle mie classi lato server a un'applicazione GWT, ma alcune parti potrebbero essere eseguite molto meglio utilizzando componenti specifici di GWT (come JSNI, ad esempio).Come fornire specifiche implementazioni GWT

Quali sono alcune tecniche per farlo senza essere troppo hacky?

Ad esempio, sono a conoscenza dell'uso di un pacchetto secondario e dell'utilizzo del tag <super-source/>, ma ciò richiede che i nomi dei pacchetti siano diversi, il che fa sì che eclissi si lamenti. La soluzione generale nella community è di dire a eclissi di usarlo come una cartella sorgente, ma eclipse si lamenta che esistono due classi con lo stesso nome.

Idealmente, ci sarebbe solo un modo per tenere tutto in un unico albero di sorgenti, e in realtà avere classi diverse che applicano le implementazioni alternative. Questo sembrerebbe un approccio più OO.

Vorrei aggiungere un suffisso ad una classe come _gwt che lo compie automaticamente, e so che potrei scrivere uno script per fare questo tipo di trasformazione, ma questo è sicuramente un kludge.

Ho preso in considerazione l'utilizzo delle librerie GIN/GUICE di Google per i miei progetti in generale e penso che potrebbe esserci una soluzione in questo caso, ma non sono sicuro perché non l'ho studiato a fondo.

Quali sono alcune soluzioni che hai provato in passato sui progetti GWT?

risposta

7

Il modo più semplice per disporre di implementazioni divise consiste nell'utilizzare il codice di super-sorgente, ma solo quanto basta per istanziare un'istanza con nome univoco o inviare a un metodo diverso. Idealmente, l'implementazione della super-sorgente è lunga solo poche righe, e non così male che non è possibile arrotolarla a mano.

Per aggirare i problemi del doppio mapping di Eclipse/javac e del nome del pacchetto, la sorgente GWT utilizza due top-level roots per il codice utente: user/src e user/super. Ad esempio, il pacchetto AutoBeans ha un'implementazione divisa di quoting e valutazione JSON, one for the JVM e one for the browser.

Non c'è davvero alcun modo non-kludgy per implementare la super-fonte, in quanto si tratta di una funzionalità fuori da ciò che è possibile specificare nella lingua. Non c'è nulla che ti permetta di dire "usa questa implementazione in questo ambiente" senza l'uso di qualche strumento esterno.

+1

+1 per il riferimento alla soluzione di Google. Sembra la migliore scommessa. Posso utilizzare questo percorso di origine alternativo come progetto separato, che dipende dal progetto principale, e su base uno per uno sovrascrive varie classi, idealmente in modo tale da ottenere un codice duplicato minimo. –

Problemi correlati