面向.NET開發人員的Ajax 技術平台策略(一)

來源:互聯網
上載者:User

      面向.NET開發人員的Ajax 技術平台策略

       在這裡我將試圖考察一下目前.NET平台的下的Ajax架構,我也試圖從中總結出來一種方法,使得你可以在眾多基於.NET平台的Ajax架構和工具包中找到你所合適的一種,同時也希望你在考察、預研和使用這些流行的這些Ajax-NET 的架構時,做得理性和有的放矢。

  我想,文章的方法會給目前使用Ajax的.NET使用者帶來協助,從而提高你在.NET平台下使用Ajax的體驗。為什麼這麼說,因為最近我的一個客戶(應該是一些客戶)的研發主管對我說,我們對Atlas 非常興趣,想瞭解更多一些相關的內容和如何開始看待Atlas,因為下個月會來一個Atlas的專家和我們交流。因為我知道這個主管手上掌握著一個Ajax架構的業務應用,目前在考慮從.NET v1.1遷移到.NET v2.0,Atlas能在怎樣的程度上幫忙他或他的Team。我沒有說太多,因為心裡我有些吃驚,目前的他們的架構應用Atlas 可能並不是一個明智的選擇,當然這個擔心基於我目前對Atlas的理解。

  我列舉和討論的Ajax-NET的架構和工具包括Atlas(Jan CTP), Anthem.NET, MagicAjax.NET , Ajax.NET Professional 和wwHoverPanel Control,這基本都是我關注的.NET平台的下的Ajax 的一些架構和實現。 基本上也都是我的這篇文章中列舉的,另外一個原因是因為他們基本上都是開源的,這個非常重要,因為沒有原始碼,我們將不知道究竟發生了什麼。另外我無意於使之成為像Daniel Zeiss作的這個比較報告。

  首先,開門見山的說明我的觀點。

  對於開源或現有的Ajax-NET技術或架構的選用必須針對你目前應用的架構來選取和考慮,如果你目前的架構是"似Ajax"的,那麼你在選擇現在所有流行的Ajax-NET的技術的時候都必須非常小心;而如果你目前的應用是使用傳統的ASP.NET的應用架構(或準備用ASP.NET v2.0開始建立新的應用),那麼目前流行的Ajax-NET的架構和技術都是普遍適合的,關鍵你要在合適的時機選擇合適的某個架構或實現。

  在我的眼中,目前流行的Ajax-NET的架構或實現都是Add-in (Plug-in)的模式的,也就是說這些架構對於所有後一種即使用傳統的ASP.NET的應用架構(或準備用ASP.NET v2.0開始建立新的應用)是Awared的也就是非常有利和方便的。但對於"似Ajax"的架構來說,情況有所不同,需要你從另外的角度來衡量,有選擇的使用。

  那什麼是"似Ajax" 的架構呢,這就是說,你的應用程式是在Ajax概念提出之前就建立的。從用戶端和伺服器端的互動分析來說,你的用戶端有大量的Javascript 代碼接受XML資料,進行對象的序列化,然後使用Javascript配合其它的HTML技術展現這些對象和資料,也可能你還有一堆HTC或其它的Javascript的HTML表現層控制項。你的伺服器端是一個Facade(或者是Adapter,Observer)模式的(Handler)控制器,接收用戶端Javascript的XML請求資料後,然後解析XML,然後調用相應的某個服務或業務組件,再將結果以XML的形式返回給用戶端Javascript ,用戶端的Javascript接收之後,再進行處理和顯示,因為可以使用HTML的DOM 和CSS,所有頁面的展現是動態。

  這樣用戶端是<Ajax in Action>中描述的Script-centric architecture 或Data-centric interactions 的方式。而且這種方式和Jesse James Garrett列舉的Ajax 是最類似的,只不過那時你或我不知道這個可以叫Ajax,只不過是現在的人誤解了Ajax,Ajax成了一種技術,一種特性,而首先不是一種某種架構下Web 應用程式了。

  而且目前流行的Ajax-NET的架構基本上都沒有實現雙向序列化,因為實現一個TextBox的自動完成用戶端只用接收資料就行了,根本不用傳回資料/對象到伺服器端,同樣做一個Ajax的狀態進度條也不用,但這些都是Ajax啊,我們衡量的標準是非同步、頁面沒有重新整理。

  很抱歉,我用了這麼字才解釋完我的觀點。最後可以這麼說,如果你的應用已經是Ajax架構的,那麼你需要仔細選擇使用目前的Ajax-NET架構,確保它也提供雙向序列化功能,相容你原來的應用和架構。如果你的應用不是Ajax架構的,那麼你可以依據一些條件來選擇Ajax-NET架構。

  然後我們回到文章的開始,來看一些流行的Ajax-NET架構

  1. MagicAjax.NET

  這是目前架構中版本號碼最小的一個Ajax-NET實現,許多人很喜歡它,甚至一見如故,但真的看過它的代碼之後,我有些擔憂。

  MagicAjax.NET基於這樣一種策略,即__doPostBack 會提及整個的ASP.NET頁面,這樣會導致頁面重新整理,所以MagicAjax.NET使用AJAXCbo.DoPostCallBack 做局部的提交,而每個AjaxPanel 中的內容則對應用戶端即時的HTML內容,因為在MagicAjax.NET中,用戶端只用執行eval(responseText) 伺服器端Rendered返回的HTML就可以了(很被動)。

  由於DoPostCallBack 會提交ViewState 以及AjaxPanelx$RBS_Store,幾乎是用XMLHttpRequest 類比一個正常的提交,所以伺服器端可以建立頁面的執行個體也可以根據ViewState 恢複所有的控制項狀態,同樣AjaxPanel 以及AjaxControl 也都會執行個體化,然後接收用戶端傳來的_EventTarget, _EventArgument 走正常的ASP.NET控制項的處理過程,等控制項Rendered之後,最終的HTML輸出被傳回用戶端,然後被用戶端的eval 顯示出來。

  整個過程非常巧妙,這幾乎是ASP.NET __doPostBack 的"Hook ASP.NET"版和加強版本。而HttpModel 主要是為瞭解決Session和交叉提交,進行用戶端Javascript的整理和注入,當然也是這裡接收用戶端的請求,在Application_EndRequest中返回結果。剩下的代碼都是處理控制項在VS Web Design中的設計時支援。AjaxCallObject.js 和WebParts.js 每次都要傳到用戶端。

  MagicAjax.NET 的一些不足和想法:

  1、__doPostBack 的加強版,適合於ASP.NET的進階使用者使用

  2、由於和ASP.NET的頁面處理機制依賴非常密切,控制項的預設動作發生變化則可能不工作,比如第三方的某個自訂控制項;

  3、依賴ViewState ,如果是加密的ViewState,則可能工作不正常,我沒有試,在代碼中好像沒有看見__VIEWSTATEENCRYPTED

  4、是對ASP.NET 全部頁面提交的最佳化,實現有限的Ajax功能,可擴充性不大

  如果是基於ASP.NET 提供的控制項和開發,那麼MagicAjax.NET 是非常有效,很好的解決了Session和跨頁面狀態的問題。而且用戶端的操作和工作基本可以忽略,MagicAjax.NET設計貼近最近的ASP.NET的版本,目前不提供調用用戶端直接調用頁面的方法。但隨著其發展,優勢可能漸少,因為Atlas 最新的版本提供類似的UpdatePanel 控制項。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.