星期日, 3月 18, 2007

書介:Ajax Patterns and Best Practices

由於AJAX的日漸火紅,越來越多的網頁開發人員都在嘗試套用這項技術的最佳方法。但除非您使用的是以伺服器端為主的應用程式框架(framework),否則就得自行透過JavaScript負責與伺服端暗通資料,並且操控瀏覽器端的資料與外觀。因此,JavaScript漸漸從用戶端的輔助角色,躍升成為整個網頁應用程式的主要核心。

如果發揮到極致時,整個網頁應用程式在用戶端就只剩下一個空的HTML網頁,加上建構網頁內容並擔負程式邏輯的JavaScript,以及伺服器端負責擷取資料與傳送資料的簡單程式。正由於如此,整體程式架構的好壞,就不只是會不會使用XmlHttpRequest物件的問題而已,Ajax Patterns and Best Practices這本書就是希望能夠幫助大家解決這個問題。

本書透過作者所彙整的9種pattern,提出建議的解決方案,所使用的工具在用戶端就是以JavaScript為主軸,而伺服端則以C#所撰寫的ASP.NET 2.0網頁或者是Java Servlet為例,主要的內容如下:
  • 第1章是簡單介紹AJAX的淵源與要素,並且比較相關技術,如果您並不是AJAX新手,大可跳過這一章。
  • 第2章主要是作為後續各章的基石,透過factory pattern建立了一個產生XmlHttpRequest物件的跨平台機制。在後面的章節中,凡是需要與伺服端溝通的部份,都是透過這一章的機制來完成,不需處理XmlHttpRequest物件的細節,而將焦點集中在每一章所要解決的問題上。
  • 第3章處理的是content chunking pattern,簡單的來說,就是將網頁區分為單獨的個別區塊,並透過AJAX技術載入個別區塊需要展示的內容。
  • 第4章提出的是cache controller pattern,主要解決的是如何為AJAX建立快取機制,使得AJAX的運作更有效率。
  • 第5章的permnutations pattern讓您可以建立一個資源封裝的機制,使得網頁應用程式可以依據用戶端的特性,以最適切的資料格式傳回同一份資料,確保用戶端可以為使用者展示正確的結果。舉例來說,如果用戶端使用的是WAP瀏覽器,那麼如果可以傳回特製的格式,就會比傳回一般的HTML格式要好,也能保證用戶端能夠閱讀結果。
  • 第6章可以視為是第3章的變化,談的是如何讓網頁中不同的區塊產生互動的機制,也就是當某個區塊因為使用者的操作或是其他原因造成狀態的變化時,讓相關聯的其他區塊也能夠產生對應的改變,這樣的問題稱為decoupled navigation pattern。
  • 第7章的presentation morphing pattern則是針對同樣的一份資料,讓它能夠在網頁上依據不同的目的或是功用,以不同的面貌同時呈現,並且可以在資料有所變動時,同時更新個別面貌的展現結果。舉例來說,當你透過表單來讓使用者輸入資料時,如果能夠同時以預覽的方式展示目前輸入的資料未來展示的樣子,就能讓使用者更確信輸入資料的正確性與適當性,而不需要等到資料輸入完畢送到伺服端後才發現錯誤而重新修改。
  • 第8章要解決的是與伺服端保持連線傳輸資料的問題,稱為persistent communication pattern,股票行情顯示的網頁就是最典型的範例。
  • 第9章的state navigation pattern則是對於如何為AJAX取得的內容建立瀏覽紀錄提出可能的解法,而不會在使用者按下熟悉的『上一頁』按鈕時,產生出乎意料的結果。
  • 第10章透過infinite data pattern處理伺服端會送來大量資料的狀況,建立分段接收與展示結果的機制,像是搜尋網頁就是大家耳熟能詳的例子。
  • 第11章提出了REST-based Model View Controller pattern,其實就是建立marshup的機制,讓網頁可以彙整外部來源的資料,重組後展示在網頁上,就像這些資料是從單一伺服器傳回的一樣。
整體而言,本書所提出的問題與解法頗具參考價值,不過作者本身的解說能力我個人覺得有頗大的進步空間,同時所下載的原始碼也很散亂,許多與書中的內容不符合。雖然如此,我還是很建議想要將AJAX列為網頁應用程式開發主要工具的程式員都可以讀讀這本書,未必要採用作者提出的程式碼,但參考一下其中的想法,應該也會有很大的幫助。

延伸閱讀:

3 則留言:

jaceju 提到...

黃大哥,差不多的書名,您對 Ajax Design Patterns 此書的看法如何?

我個人認為它解釋了很多 Ajax 帶來的現象,也提出一些不錯的建議 (不過大多都是要大家直接上網去看的範例) ,大概是學習 GoF 的方式吧。

mee 提到...

您說的是O'Reilly的那一本嗎?我印象中這一本書中對於整體架構比較沒有具體的實作,不知道有沒有記錯,再回頭把書翻一翻,確認一下!

jaceju 提到...

是呀,它講的都是概念,沒有太多實作的東西 (所以我才會覺得和 GoF 很像) 。