跳到主要內容

ZK - open source Ajax Framework介紹

ZK介紹
數年前因IThome的報導就有注意到ZK,以framework作為產品的台灣公司,真的是非常少見,而ZK的表現也是令人激賞。
除了ZK 這個主軸的framework以外,其相關的產品也很全面,介紹部份如下:
  • ZK studio
    一個eclipse plugin,用來加速ZK開發的工具。內含一些簡化開發過程的工具如:
    ZUL Visual Editor, 可以預覽zul所設計的UI在瀏覽器上顯示的樣子,方便設計UI。
    Properties, 點選某個zul中的UI元件,即會顯示該元件的所有可設定的properties。
    ZUL Palette, 元件調色盤,可以將UI元件用拖拉的方式放至zul文件中。
  • ZK JSP tag
    將zk的元件整合至jsp中,若不想完全改寫既有jsp頁面,可以採用此一選擇,可以立即獲得Ajax的特性。
  • ZK Spreadsheet
    類似Google docs中試算表的元件
  • ZK calendar
    類似Google calendar的元件

ZK線上展示,直接以畫面示範所有元件的用法與外觀,你可以手動修改原始碼並立即觀看修改後的結果,很棒的一個作法。

優點
  • 快速擁有Ajax效果
    對JavaEE工程師來說,在不換平台的情況下(Flex, Silverlight)要做出RIA,擁有的選擇不多,直接透過Javascript使用AJAX或採用Ajax相關的library(Jquery,DWR)需要一段時間學習,RichFaces也可能是個選擇,但JSF似乎不是很多人採用,對於JavaEE工程師來說,可以透過學習成本不高的ZK來快速打造RIA。
  • 支援MVC架構
    zul配合ZK composer(Controller),可以使zul頁面純粹擔任View的角色,完全不需寫程式碼在頁面上,作到清楚的MVC切分。
    composer更可對頁面UI進行動態新增、刪減或修改屬性之變化,皆透過zK ajax engine來完成。
  • 可純粹以Java開發
    雖然ZK 5已讓懂javascript的人作前後端整合開發,甚至支援其他的script語言,但是幾乎所有既有元件功能都仍然可以透過Java控制。
  • Component-based, Event-Driven
    UI畫面以UI元件為基礎配置,也可以某個程度的客製化元件。zul頁面上的各種UI動作都可觸發成event並傳到後端的composer(Controller)來處理,架構清楚簡單。
  • 可整合主流application framework
    因ZK可作嚴格的MVC劃分,因此在整合Spring, Hibernate等主流的中、後層framework上沒有什麼問題,未來即使將ZK抽換掉也只需要重寫前端畫面與controller部份,後端以其他framework做好的部份仍可以重複使用。ZK甚至做了一些用來整合Spring的部份,不過這在CE版中沒有提供。
  • 學習資源豐富
    Java World的AJAX討論區。
    官網的文件完整, 並由ZK採用者根據不同主題撰寫的Small Talk, 以及互動頻繁的討論區,以上都是採用framework時要評估的指標之一。

授權
要注意授權,最自由的就是ZK 5 CE以LGPL釋出,其他版本大多以GPL釋出。
CE版幾乎可以符合大部分的需要,當然在元件部份會比PE, EE版少。
ZK5不同版本間的元件差異比較表


1 則留言

這個網誌中的熱門文章

JavaScript 關掉瀏覽器頁面

如果你直接呼叫 window.close() 來關掉目前的頁面的話,你應該會在 console 看到以下訊息:
Scripts may close only the windows that were opened by it.
( 我在 Chrome, Firefox, IE 11 都試過)
主因就是你並沒有用 JavaScript 開啟這個頁面,所以也不能用 JavaScript 關掉它。這是 HTML window.close() 的規格規定,各家瀏覽器應該都遵循。

隨著瀏覽器安全性增加,以下方法已經不適用了,可參考這個討論


有個變通的辦法就是:
window.open(location, '_self').close();


ZK 教學 - 使用 MVC 或 MVVM?

不管是現在剛開始接觸 ZK 或是用過一陣子的人都可能會遇到的問題是到底要用 MVC 或 MVVM 的方式開發。從 ZK 8 之後又把 MVVM 的能力更佳的擴展,所以 MVVM 會是一個功能更強的開發方式。但 MVC 在使用上比較直覺,仍有其優勢,所以我想決定性的因素會比較是開發者的偏好專案的特性。你可參考下面的比較來決定哪種方式比較適合你。優勢比較MVVMViewModel 較不易受畫面變動影響。
因為 ViewModel 沒有變數直接指向 ZK 元件,因此若是畫面上有元件更改,ViewModel 一般不需要修改ViewModel 較易於在不同頁面中重用。
因為 ViewModel 只包含資料跟業務邏輯,若是不同頁面需要的資料跟業務邏輯相同,就可以重用同一個 ViewModel例如 A 頁面按按鈕執行搜尋,B 頁面點選單執行同樣的搜尋,則可以重用同一個 ViewModel 中的 command,只是兩個頁面 data binding 寫在不同的元件上。畫面較易於重用(易於模組化)。
透過 shadow component 跟 template 機制,可以將一段頁面的片段做成可以接受傳入參數套用 Responsive Design 的成本較低。
通常需要針對不同裝置設計不同版面,但是顯示的資料內容大同小異,因此 ViewModel 多半可以重用易於套用美工所設計的畫面,或是網路上現成的元件。易於整合第三方 javascript library 或 widget。
因為 ZK 8 提供了一個可以讓你透過 javascript 去呼叫 ViewModel 中的 command (client side binding) 的方式來跟後端溝通ViewModel 的可測試性較好。
因為 ViewModel 不需要繼承特定類別跟實作特定介面,可以輕易地執行單元測試MVC操控元件方式直覺好學、易懂。
MVVM 控制元件較不直接,需要了解 zk framework data binding 的行為可以完全使用元件所提供的所有 API。
仍有極少部分 ZK 元件行為沒辦法用 MVVM 控制。例如產生 Messagebox, Listbox.renderAll(), Popup.open()。但這都可以改用直接控制元件的方式來解決,只是就是非 MVVM 的方法,喜歡維持一致的開發模…

ZK 教學中文書 - ZK 教練

2016年開始做了不少場教育訓練,覺得台灣工程師應該會蠻希望有一本中文的教材,因為目前網路上多是零散的文章,英文的文件雖然完整,但是太龐大,大部分的人應該無從下手。因此最近開始撰寫一本教學書:「ZK 教練」(書名是老婆提供的點子),也為自己在這份工作推出一個代表作。
本書會包含以下幾個特點,幫助讀者更有效地學習:
範例專案
本書附帶一個範例專案,裡面包含所有書中提到的範例程式。你可以輕易地將整個專案執行在 jetty 上,透過瀏覽器看到執行結果,有助於了解程式碼。練習專案
執行 maven 指令可以產生一個練習專案,它以範例專案為基礎,但是刻意移除部分程式碼,好讓讀者練習之用。因此你可以產生範例專案來練習,若真的遇到困難再參考完整程式。圖片解說
儘量以各式圖片解說概念。我認同 Head First Design Pattern 一書中提及的理念,學習不是只能靠文字,其他的媒介可以讓大腦得到更多資訊,更增強學習效果。情境 FAQ
ZK 目前已經是個頗為成熟的框架,功能很多,因此不熟悉的人常常不知道實務上某個情境要用什麼功能來解決,這裡會列出各個常用的情境並提供連結指向建議使用的 ZK 特性 當然目前本書尚未完成,歡迎給予回饋。
去看看 ZK 教練