2011-02-09 127 views
7

假設我正在將一些服務器端類公開給GWT應用程序,但使用GWT特定組件(例如JSNI)可以使某些部分更好。如何提供特定的GWT實現

什麼是一些這樣做,而不是太hacky的技術?

例如,我知道使用一個子包並使用<super-source/>標籤,但這需要包名稱不同,這會導致eclipse發生抱怨。社區中的一般解決方案是告訴eclipse使用它作爲源文件夾,但是然後eclipse抱怨有兩個同名的類。

理想情況下,只有一種方法可以將所有內容保留在單個源代碼樹中,並且實際上有適用於其他實現的不同類。這就像一個更OO的方法。

我想爲像_gwt這樣的類自動添加一個後綴,並且我知道我可以編寫一個腳本來完成這種類型的轉換,但這肯定是一種混亂。

我一直在考慮在我的項目中使用Google的GIN/GUICE庫,我認爲這裏可能有某種解決方案,但我不確定,因爲我沒有徹底調查過它。

GWT項目過去曾嘗試過哪些解決方案?

回答

7

分離實現的最簡單方法是使用超級源代碼,但僅用於實例化一個唯一命名的實例或分派到不同的方法。理想情況下,超級源代碼的實現只需幾行,並且不會太差,以至於無法手動推出。

要解決Eclipse/javac雙映射和程序包名稱問題,GWT源使用兩個用戶代碼爲top-level roots:user/src和user/super。例如,AutoBeans包具有JSON引用和評估的拆分實現,one for the JVMone for the browser

實際上沒有非常好的方法來實現超級源代碼,因爲這是一種超出您可以在語言中指定的功能方式。沒有什麼可以讓你說「在這個環境中使用這個實現」而不需要使用一些外部工具。

+1

+1是指Google的解決方案。似乎是最好的選擇。我可以使用這個替代源路徑作爲一個單獨的項目,這取決於主項目,並且可以一個接一個地重寫各個類,理想情況是以這樣的方式導致最小重複代碼。 – 2011-02-09 19:12:36