摘要:《ASP.NET AJAX 經典講座》譯者導讀
《ASP.NET AJAX 經典講座》譯者導讀
俗話說:「閃閃發亮的不一定是金子。」軟體技術的領域也一樣。
本書雖定位為 ASP.NET AJAX 的入門書,但就筆者的感覺,作者顯然希望讀者能夠從本書獲得更紮實的技術與更寬廣的視野,同時能夠看清 AJAX 技術的本質,了解各種實務做法的優缺點,而不只是滿足於使用一些簡單、酷炫的控制項來開發 Web 應用程式。那些控制項看起來的確閃閃發亮,能迅速吸引眾人的目光;它們也確實非常簡單、好用,大幅降低了入門門檻。但它們絕非 ASP.NET AJAX 的全部,而且簡單的背後往往伴隨著看不見的成本與陷阱。因此,除了說明如何運用各種控制項,作者還會以他專業的技術剖刀,為你分析各種做法的優缺點,讓你 在碰到實際的問題時能避開一些陷阱,並根據實際的需求判斷該選擇哪一種方法。畢竟,軟體設計就是不斷取捨的過程,不是嗎?
從架構來看,本書分成三大部分。前面兩章主要是介紹一些 AJAX 的基本觀念以及 AJAX Client Library,是紮穩馬步的功夫。也許讀者會期望盡快了解如何使用 UpdatePanel 及其他 AJAX 控制項以迅速做出酷炫效果的網頁,畢竟這是最簡單、也是最快的捷徑。但作者卻選擇先介紹以 JavaScript 寫成的 AJAX Client Library,我想這是因為它不僅是 ASP.NET AJAX 用戶端的核心引擎,同時也是經常被開發人員忽略的部分。AJAX Client Library 是由一些 JavaScript 類別組成的用戶端程式庫,它有許多方便的工具類別,而且擴充了標準 JavaScript 語言的能力,使其具備更完整的物件導向機制。作者不只是介紹這些新增的功能,還進一步把 AJAX Client Library 的 JavaScript 原始碼挖出來,讓你了解這些神奇功能究竟是如何實作出來的。看完之後不禁汗顏:原來 JavaScript 語法可以有如此變化,功能可以如此強大!以往我總是比較關注伺服器端技術,而刻意忽略用戶端技術,這習慣恐怕得改一改了。更何況,下一版的 Visual Studio(代號 "Orcas")將提供更方便的 JavaScript 除錯功能,開發人員實在沒有理由再逃避 JavaScript 了。
第 3 章到第 5 章主要是介紹伺服器端的程式開發技術,包括扮演 ASP.NET AJAX 網頁中樞角色的指令碼管理員(ScriptManager)控制項、使用 UpdatePanel 實現局部頁面更新、以及 AJAX Control Toolkit 提供的各種強大、好用的控制項。在這個部份,你將了解如何運用那些功能強大的控制項及及擴充器(extenders),迅速改善網頁的操作介面,並且為網頁增添酷炫的華麗效果,例如:可收合的手風琴摺(Accordion)、具有浮水印提示效果的文字方塊(TextBoxWatermark)、拖曳式面板(DragPanel)、多頁籤檢視...等等。
第 6 章到第 8 章再度將焦點拉回到以用戶端為中心的開發技術。在這個部分,你將了解如何透過 JavaScript 直接存取 ASP.NET 內建的身分驗證(authentication)及使用者設定檔(profile)服務。作者將示範如何藉由 AJAX 技術改善傳統登入流程的缺點──需要單獨的登入頁面及額外的頁面跳轉動作。此外,第 7 章詳細說明了 ASP.NET 的遠端呼叫機制,你將了解如何在用戶端直接呼叫應用程式本身提供的 Web services,以及透過橋接(bridge)技術存取其他 Web services(例如:Amazon)提供的服務。最後一章則是討論 AJAX 應用程式開發的進階議題,包括:AJAX 的優點與缺點、架構面的考量、AJAX 設計模式(design patterns)等等,並且以 ASP.NET 入門套件為例,示範如何運用之前介紹的各種技巧與設計原則,將一個已經開發完成的 ASP.NET 網站改成 AJAX 版本。
很顯然地,這不是一本可以從頭到尾躺在床上閱讀的書籍。作者通常會先說明一些基礎觀念,接著就進入程式撰寫的相關議題。有時候,幾句扼要的說明再搭 配一個簡短的範例,當中就蘊藏一些重要的觀念和技巧,若光是看而沒有實際動手寫程式,可能就會漏掉作者想傳達的訊息。對某些看似簡單的議題,作者也會提醒 你實務運用上可能碰到的陷阱或限制,並解釋這些限制背後的原因。例如第 4 章的 UpdateProgress(執行非同步更新時,用來提供視覺回饋的控制項),作者不只告訴你常用的技巧,還點出 UpdateProgress 和外部觸發器同時使用時無法正常顯示的問題,並且進一步分析原因並提供解決方法。此外,書中的範例都非常精簡,實作起來也不困難,因此書中並未詳述每個範 例的實作步驟,例如:先拉一個 X,然後在 Y 上點右鍵,接著設定 Z 屬性……之類的。我想,這是本書之所以有紮實、豐富的內涵,外觀上看來卻又不致於過度肥胖的原因之一。若讀者已經有一些 ASP.NET 網頁的開發經驗,相信應該能獨立完成書中大部分的範例。當然啦,如果您趕時間的話,也可以直接下載本書的完整原始碼。筆者的部落格將提供範例原始碼、勘誤 表、以及其他補充資料,網址是:http://huanlin.dyndns.org/cs/。
關於翻譯
在翻譯本書時,我發現有些術語用中文表達起來感覺太過生硬,例如:回呼(callback)、程式碼後置(code-behind)、工作階段 (session)、cookie……等,而且據筆者觀察,平日溝通時如果提到這些術語,大家其實都還是講英文比較多。因此,中文版碰到這些術語的時候, 便還是以英文為主,亦即第一次出現時中英並陳,以後再碰到時都只用英文。這是為了閱讀的流暢性而做的取捨,如果不巧跟您的習慣不同而造成閱讀上的困擾,還 請讀者見諒。
另外要特別說明的是 property 和 attribute,一般均譯為「屬性」。在指稱類別的屬性時,英文用的是 property;在提到 HTML/XML 標籤的屬性時,則是 attribute。一般來說,讀者應該能夠根據上下文分辨當時的「屬性」所指為何,但在翻譯本書時卻有一個句子同時出現兩種「屬性」的情形。因此,為了 避免混淆,筆者在處理這兩個術語時,幾乎都採中英並陳的方式。此外,attribute 還有一詞多義的問題,因為除了用在 HTML/XML 標籤的屬性,.NET 程式語言的 attribute 語法也是用這個詞。碰到這種情形,我的處理方式是將它譯為「特徵項」。這不是微軟官方的譯法,而是個人的偏好,在此特別向讀者說明。
致謝
最後,謹在此感謝悅知文化的編輯張婉蓉小姐。從校稿的建議當中,可以明顯感受到她的細心及付出的心力。本書的品質泰半應歸功於她。
蔡煥麟
2007 年 8 月