2011年11月27日 星期日

為 GWT 端正視聽

原文網址:http://errai-blog.blogspot.com/2011/11/setting-record-straight-on-gwt.html

自從加入 Errai 團隊後,我對人們說了很多關於這個 project 的事。每次在述說的時候,我發現我是在驅除人們對 GWT 的常見誤解、以及講解 GWT 可以怎麼使用。我也發現人們對於 GWT 的程式碼可以輕易地存取 browser 的原生環境感到驚訝,雖然 GWT 在跨 browser 之間的實作細節處理的很好,但 GWT 並不是建立一道高牆把你跟底層環境隔絕開來。

所以,GWT 是啥?
GWT(Google Web Toolkit)是一個包含許多獨立部份的 project。下面列出其中一部分:
  1. 一個將 Java 編譯成 JavaScript 的 compiler
  2. 一個 library 提供:
    • JavaSE 5 標準 library 的一個子集(尤其是 java.lang 與 java.util)
    • 可程式化的 UI Framework(像 Swing 那樣)
    • 原生 browser 功能——例如 JSONXML 的操作、XMLHttpRequest(AJAX 跟 Comet)、以及 Canvas、Local storage、Audio、Video 這些 HTML5 的功能——的 Java wrapper。
    • RPC 機制,前提是你的 application 後端是用 Java 寫的才能用。(GWT RPC 沒辦法輕易改裝既有的 object model,不過你可以把他用來建立 server-side 的 RPC 層)
  3. GWT Designer,一個視覺化 layout 工具,可產生類似 Swing 的 UI framework 程式碼。
  4. UiBinder,一套定義 UI 的系統。(定義 layout 的檔案實質上是一個 XHTML,裡頭設定了 GWT 的 widget,有命名的 element 會自動對應到 Java class 中的 field)
  5. 給 Eclipse、Maven、Ant 的 plugin,以協助建立、測試 GWT 的 application、並除錯。
compiler 是使用 GWT 的基礎。其他的部份則不是必須的:你用或不用、混合著用、用 3rd party 的替代方案或是自己搞一個出來用都可以。

那,GWT 不是什麼?
我們已經用清單的方式將 GWT 是什麼給凸顯出來,現在的重點是界定它不是什麼:
  1. GWT 並沒有限定 UI 的建立方式。尤其是用「browser 上的 Swing」思維來建立 UI,這完全不必要——除非你本來就想這麼作。
  2. GWT 不像 JSF 是 server-centric 的系統,GWT application 會編譯成一堆 HTML、CSS、圖檔、JavaScript 的靜態檔案。application 在 browser 上頭運作,只有在需要的時候與 server 作資料傳輸。如果你沒有用 GWT RPC,你的 application 就不用放在 Java web server 上。
  3. GWT 不需要任何 browser plugin(譯註:這裡是相對於 Flash 等技術實際使用時需要安裝 plugin。雖然說開發 GWT 基本上也是可以不裝 browser plugin...... XD)。編譯完的 application 就是一個或多個標準的 web 頁面。
  4. GWT 並不阻止你直接寫 JavaScript。你可以用 JSNI的方式在 Java class 中寫 inline JavaScript、你可以把 Java API 轉成 JavaScript、你也可以在 Java 當中呼叫 JavaScript API。
  5. GWT 並沒有停止開發(譯註: 我也寫了〈GWT and Dart〉的中文翻譯。這個謠言實在太誇張了。

如果 GWT application 只是簡化 JavaScript 跟 HTML,幹麼這麼麻煩咧?
感謝你問了這麼一個好問題。有許多令人信服的理由,讓我在原始 HTML 與 JavaScript 上使用 GWT。我會在未來的文章當中指出我特別喜歡的原因,此外,我也希望你能思索一下這個問題:「如果 GWT 把這些都處理好了,為甚麼 Errai 也要來插一腳呢?
譯註:errai 是由 JBoss 所維護的 GWT framework。這篇的原文是張貼在 errai 的官方開發 blog 上,內容以及基本論調與當初自己寫的〈GWT:這是什麼?幹什麼的?〉相似。不過人家是搞 JavaEE 的 JBoss、我只是個小痞子,所以還是翻譯一下,提供對照比較的機會。

沒有留言:

張貼留言