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

來源:互聯網
上載者:User
ajax|策略|技術平台 2. Anthem.NET

  目前是1.0版本,其設計理念是通過另外一個思路,遵循這樣的理念--既然ASP.NET的各個標準控制項沒有實現提交功能,那麼我可以產生一個提交的介面,然後繼承原來的標準控制項,然後再實現這個介面,這樣每個控制項都可以向伺服器端單獨進行提交。

  每個控制項的發生過程類似MagicAjax.NET,Anthem.NET提供了各個控制項Javascript端的提交函數-這等於也截取了__doPostBack,之後Anthem.NET 還提供了完善的用戶端的事件比如PostCallBack 和PreCallBack 這樣的用戶端事件,之後也將使用XMLHttpRequest 類比一個傳統的頁面提交請求到伺服器端,伺服器端產生頁面執行個體,這個過程和MagicAjax.NET一樣,最後是將Rendered的HTML在控制項的Render() 事件傳回到用戶端,用戶端控制項的innerHTML被賦值,動態更新。

  和MagicAjax.NET不同的是,Anthem.NET沒有容器的概念,因為每個控制項都增加了提交介面,所以可以單獨的提交,所以單位是以一個控制項為單位進行一次提交,Anthem.NET的花費更小些(但伺服器端是類似的,因為整個ASP.NET頁面的Pipeline都會進行)。

  此外,Anthem.NET 還有另外的功能,就是可以通過用戶端調用頁面中的方法並獲得結果/資料,這種情況下,你將調用Anthem_InvokePageMethod 方法,而不是Anthem.NET提供的預設各個控制項的提交方法。這樣Javascript的回調處理函數中的result.value 將可以獲得調用的服務端的某個方法(該方法以[Anthem.Method]為標記)的執行結果,因為JavascriptPost的資料中有Page/MasterPage/Control 了,那麼伺服器端很容易通過這個標識獲得方法的地址,應用反射尋找[Anthem.Method]標記,然後調用,將結果返回到用戶端。

  Anthem.NET支援返回對象,DataSet,DataTable和 WriteDataRow(WriteDataSet,WriteDataTable,WriteDataRow,WriteObject),返回的是符合是JSON規範的字串,這樣用戶端的Javascript就可以使用這些對象了。不同於MagicAjax.NET,Anthem.NET 沒有使用HTTP Model,所以結果是在頁面的PreRender() 事件中處理和返回請求的結果。

  2.1 Ajax.NET Professional

  我沒有看過Ajax.NET Professional 的原始碼,但從例子中看得其支援調用頁面的某個方法,以及返回對象,DataSet,DataTable的資料,我認為Ajax.NET Professional 的實現和Anthem.NET 原理是一樣的,雖然Ajax.NET Professional 使用了HTTP Model,這個只是和Anthem.NET 一樣,最終處理結果的返回處理上稍有不同不同。比較起來,Ajax.NET Professional 沒有重新繼承所有常用的ASP.NET控制項實現部分提交的功能,所以可能Ajax.NET Professional 比較強項的是調用頁面上的某個方法,並在用戶端獲得結果的資料,這個已經夠實現大部分的Ajax的功能了。

  從這個層面上看,我認為Ajax.NET Professional 是相對笨重和複雜了。Anthem.NET不使用HTTP Model,提供控制項基本的局部提交,也提供資料層面的用戶端方法調用。Ajax.NET Professional 的原始碼似乎總是不想共用 ,這也是我不喜歡它的另外一個原因。
無論如何,大家都沒有提供兩路的資料交換,即用戶端可以獲得伺服器端的方法並獲得結果和資料,但是目前都支援將這些對象/資料修改之後返回給伺服器端。

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

  1) Anthem.NET 也是一種"Hook ASP.NET"原理,旨在彌補ASP.NET的整頁面的提交和PostBack,並且在用戶端的資料訪問和互動上做了加強。

  2) Anthem.NET需要重新將ASP.NET提供的控制項進行繼承和封裝,所以使用和功能的相容性上非常敏感。

  3) 也許微軟下個版本的ASP.NET的標準控制項可以借鑒Anthem.NET的做法,給各個控制項增加這個遠程回調的介面。

  4) 目前版本的功能已經非常強大和略有些複雜了,而且部署比較方便,無需設定HTTP Model。

  3. wwHoverPanel AJAX Control for ASP.NET

  wwHoverPanel AJAX Control for ASP.NET 這也是一個ASP.NET的控制項,但是提供了用戶端回調(進階回調)、用戶端調用頁面方法,以及雙向兩路的序列化功能。

  wwHoverPanel 吸取了MagicAjax.NET 和 Anthem.NET的優點,同時又結合了ASP.NET的用戶端回調功能,是一個輕量級的Ajax組件。

  看待wwHoverPanel 最大的兩個特性中的一個是用很簡單的方式實現了一個HoverPanel Behavior,這個實現比目前Atalas的Behavior 要簡單,作者Rick Strahl 也強調這個主要是結合他具體的應用,比如這裡提供了一個小的HTML板,可以顯示獲得的結果資訊。

  wwHoverPanel 也提供一個局部回調的方法,但是這點的實現上和MagicAjax.NET 以及 Anthem.NET完全不同,它是使用一個StartCallback的Javascript來組合查詢字串提交並且使用XMLHTTP發請求到伺服器的某個頁面(由ServerUrl 屬性指定),之後這個頁面將結果以Response.Write()的原生HTML內容返回。這個和ASP.NET的回調方法非常類似,而且還支援將請求發到本頁之外的ASP.NET並獲得結果,所以它增強了原來ASP.NET的用戶端回調的方法,即支援其它頁面的回調。可以說,這是一種基於URL的用戶端回調。

  wwHoverPanel 提供的第二個功能是,用戶端可以調用伺服器端中的某個頁面的方法(這些方法以[CallbackMethod]進行標識),這種情況下,你要設定EventHandlerMode="CallPageMethod" ,然後使用wwHoverPanel.伺服器方法名(參數,參數,...,回調處理函數)的方式進行調用。這個其實使用的是一個Javascript的CallMethod 方法,調用伺服器端的請求。Javascript 的HandleCallback 則用來處理返回的結果,邏輯相對簡單,儘管控制項的innerHTML 也被賦值,但這個主要是為了維護作為用戶端回調結果顯示的小的HTML板的內容,否則就是調用頁面中的方法了,那麼結果就直接給用戶端的回調方法了。

  特色三,就是我說的雙路的序列化功能了,其實這個情境我們也非常需要,比如我們用用戶端回調或XMLHTTP請求獲得了一個定單對象,那麼用戶端修改之後,我還想把它作為一個用戶端調用的輸入參數,返回到伺服器端。這時候兩路雙向的序列化就需要了,因為這次伺服器需要將Javascript的函數傳了的資料序列化成.NET的類。這也就是JSON的雙向序列化了(主要代碼在JSONSerializer.cs ),這也是我挺喜歡的一個功能,因為我對這個功能關注很久,但是目前流行的Ajax-NET的架構都不支援這個功能。

  目前在wwHoverPanel 的情境中,我認為這是一種輕量級的實現,對於多層嵌套多組引用的對象圖類型或是大規模容量訪問壓力下,用戶端和伺服器端都還需要最佳化,所以如果其作為Ajax架構,用戶端和伺服器端通訊和傳遞資料的通訊層上,顯然是有些單薄了。

  wwHoverPanel 的一些不足和想法:

  1) 該控制項是目前我見過.NET平台下,惟一同時支援用戶端回調和頁面方法調用的Ajax 控制項,同時又支援兩路雙向的序列化。

  2) 相對來說,wwHoverPanel是設計最簡單的一個,而且是基於控制項不依賴HTTP Model和ASP.NET Page Pipeline,也不依賴ViewState

  3) 該控制項能夠讓你在Ajax特性實現的技術層面上,能夠在客戶回調和用戶端調用頁面方法兩者中取得平衡。

  4) 目前的用戶端回調支援其它頁面的回調,但是其結果輸出需要輸出原始的HTML,這個影響應用的分層和設計。

  5) JSON的雙向序列化是一個不錯的方案,但高效能的情境下,應該考慮實現更高效的序列化架構

  4. Atlas

  這個產品,我就不列舉具體的功能了,而主要說一下我對其的看法和持有的態度。因為在我的Ajax書評中提到過問題。

  Atlas 是一個個性鮮明的產品,其優點是明顯的,缺點也是明顯的,但首先你必須認識到它還是一個比較複雜,擁有較高學習曲線的解決方案。對於其複雜性,老實說目前,大多數人還缺乏真實的感受。

  最近的一個個版本-Jan CTP,我們看到了一些特性,其強大之處在於:

  1.用戶端(Javascript)的資料繫結、校正帶來便利。

  2. 新的Update Panels不僅擁有了MagicAjax.NET 的特性,而且功能更強,是目前Atlas中非同步回調的主要控制項。

  3.內建了一些具體Ajax特性的控制項,比如AutoCompleteExtender ,DragOverlayExtender

  4. 提供了一些使用的控制項比如,ScriptManager, Triggers ,TimerControl

  5. 主要用途著重在提供一個用戶端控制項和伺服器端控制項的特性整合的方案和容易使用的開發效率上。

  但缺點也是明顯的,比如:

  1. 用戶端的Behaviors還很弱,模板(Templates)和UI增強(UI Enhancements)功能還沒有看到。

  2. 所謂的用戶端Atlas控制項(“Atlas” Client Controls)和伺服器端的Atlas控制項(“Atlas” Server Controls) 還沒有一個明確的規範,所以現在你基本上還不能建立自訂的Atlas控制項(無論用戶端還是伺服器端的)。

  3. 目前還只支援調用Web Services的服務,對於ASP.NET的內建的服務以及WCF的服務支援也沒有看見,也不支援頁面或控制項內的方法調用

  4. 功能上還不穩定,一些功能僅是在特定條件下的特性實現,還不能滿足部署生產環境的要求。我認為,如果Atlas發布Go-Live License,那麼可以考慮Atlas的放入到正式的項目或應用中。

  我並不建議,你現在就將它應用在一個老的ASP.NET 項目中,或是老項目遷移到ASP.NET v2.0時優先考慮它;更多時候,如果你是建立一個新的ASP.NET應用,而又跨越了其學習曲線的情況下,可以考慮使用它。目前的情況下,對於Atlas,我建議,你應該保持足夠的關注和實踐學習,但是要抑制住將其應用到項目中的興趣;因為Ajax,你現在可以開始關注和學習它,但是你不能因為要實現Ajax一個特性,而立即選擇Atlas,那麼是可能有風險的。

  註: Atals 的Microsoft.Web.Script.Serialization 命名空間中有JavaScriptObjectDeserializer和JavaScriptObjectSerializer兩個對象,第一,我不確定其是否也是JSON 序列化,而且我也不確定目前是否支援兩路雙向的序列化;第二,目前的版本,我還不能進行自訂或擴充,同時也很難對於其效能做任何的結論。
  • Ajax: 一個建立Web應用的新途徑
  • Ajax的錯誤處理機制探討(2)
  • Ajax的錯誤處理機制探討(1)
  • 初次體驗.NET Ajax無重新整理技術
  • Rails系統中的AJAX開發技術簡析(4)


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.