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

來源:互聯網
上載者:User
ajax|策略|技術平台 基於Ajax 架構的Web應用程式框架

  之前我提到過"似Ajax" 的架構,現在我要說的Ajax架構也就是指專門針對這種Ajax架構而提供的架構。目前,我還沒有聽說過特別好的這個領域的流行架構。但我知道我的身邊,.NET領域,J2EE領域或PHP平台上都有這樣的架構和應用,我認為,正是因為有很多這樣應用,所以Ajax才會像某個模式一樣,被撰有一個專門的名詞。不過我感覺Ajax 漸漸層成了Ajax feature的代名詞,變成了XMLHTTP的代名詞,成了非同步通訊,不重新整理頁面的技術標記法。直到我看過Ajax in Action這本書,我才把Ajax和系統的架構、設計模式,分布式對象的序列化和我之前的項目和經曆聯絡在一切。

  我修改了一些Jesse的圖,來說明我認為的基於Ajax的架構是什麼樣的。



  這也就是我上面說的“似Ajax”架構,首先它是一個Web應用;它的表現層用DHTML+CSS + HTC控制項+ Javascript ,伺服器端用.NET或任何的伺服器端技術,中間以XML方式序列化和還原序列化進行傳遞資料。

  簡單的說,用戶端需要將請求的資料封裝成一個XML資料通過HTTP傳遞給伺服器端,伺服器端處理這個請求,並將結果也以XML的形式返回到用戶端,用戶端再處理這些請求,然後使用HTML+CSS進行展示。其實如果不是Web用戶端(瀏覽器)的問題,這是最簡單的架構,但關鍵問題在於上面我們說的Javascript端的對象封裝成一個XML,以及到服務端解析XML變成伺服器端對象,然後再將結果封裝成XML,傳回給用戶端(Javascript),用戶端也解析XML資料,然後變成Javascript 中的對象的這個序列化和還原序列化的問題。另外一個問題就是表現層的展現問題,怎麼展現,用什麼控制項?

  所以,一個Ajax架構的Web應用程式,必須解決下面的問題:

  1. 雙向兩路的序列化問題

  2. 表現層展現的問題

  3. 傳輸時用戶端和伺服器端的資料安全問題

  4. 效能問題

  5. 國際化支援

  最好玩的雙向兩路的序列化問題,最早接觸的是JSON ,它的問題在於擴充性,資料類型的支援和效能,但是平台無關性比較好,什麼瀏覽器都可以,因為它不需要用msxml2.DOMDocumen分析XML,本質上就是用字串描述對象;之後多平台的應用的遷移經曆中(比如CORBAR,J2EE的後台應用),開始接觸到XML-RPC ,ICE,Hessian,Web Services等等。其中XML-RPC有Javascript 的支援庫,Web Services也有Javascript的支援庫,也就是你可以使用Javascript訪問或者獲得XML-RPC/Web Services的對象,但是如果你將其作為一個主要的通訊協議,那麼就會遇到另外一些問題,比如效能、國際化的問題,又會困擾你,XML-RPC和Web Services的一個主要問題都是效能,因為他們傳輸的XML大小都太大了,但顯然用這些實現一個Ajax的特性,那是完全沒有問題了。

  比如,Atlas目前不也是使用一個Javascript庫調用Web Services嗎?,所以,你也可以這麼做,同樣你也可以用XML-RPC.NET 很快就可以實現一個Service,然後使用Scotandrew的XML-RPC javascript 庫就可以在Javascript中發一個XML-RPC 訊息請求這個服務,然後非同步獲得這個結果,然後展現它。所以從技術的實現上講,Ajax的特性非常容易實現,但從架構上來看。你需要思考更多的因素。當然直到最後,我們才發現,在項目中,最完美的方案是你自己寫一個雙向兩路的序列化引擎供你的Javascript用戶端使用。

  這就說到了第二個問題,介面表現的問題,這個問題也是一個大的問題。這個問題一直會永遠存在,Ajax之前沒有人會太注意這些,但今天不同了,我想未來還會有很大的一個飛躍, Yahoo! 不是最近也開源了他的Yahoo! Web UI庫,Atlas 也表示要提供更多的前端UI控制項。無論如何,這個問題是,你的團隊或組織是否有一套經過項目或客戶檢驗的前端Javascript的庫。無論是自己用Javascript寫的也好,是自己寫的一套HTC的控制項陳列庫也好,總之這些是Ajax 架構中非常重要的一環。

  Atlas 帶來了另外一個思考問題,就是伺服器端控制項可能可以通過某種方式和Javascript的控制項很好的整合在一起,以前我們用HTC解決了重用、效能、Behaviors、甚至模板功能。但是新的特性還是有比如資料的綁定、緩衝和校正、甚至是資料編碼和壓縮、加密和解密,Javascript UI前端還是有許多可以做的,而且如何無縫的整合兩者,這個有非常大的意義。

  接著安全、效能、國際化等等,架構中的問題需要你依次考慮和解決,如果這麼看Ajax,我認為,目前的Ajax架構還有很長很長一段路要走,同樣真正完美支援Ajax架構的還需要繼續努力。這些也是我在這篇專欄文章中的觀點。

  把這些合在一起,那麼Ajax架構的開發包或架構,就應該是包含了上述幾個問題(兩路雙向的序列化、Javascript UI 表現庫、安全、國際化和效能等等)解決方案的一個平台實現。

  同樣也許你會說,不就是Ajax嗎? 我幹嘛要搞這麼複雜,一定要搞到架構這個層面。

  我認為,

  第一,從架構的層面看Ajax,然後再應用相關的技術,比你直接使用某個Ajax架構然後再理解Ajax,你會從這個過程中收穫更多。

  第二,對於一個Team Dev/組織來說,真正Ajax架構的產品,可以帶來效益和具體的生產力。比如,我身邊就有擁有這樣的優勢的團隊,他們擁有一套統一的由Javascript+HTML+CSS+HTC的前端表現層,而背景業務系統有兩個平台,一個.NET平台和J2EE平台;同樣我身邊的也有這樣的團隊,他們擁有一套統一的由Javascript+DHTML+CSS+HTC+VML+ASP.NET的前端表現層,但他們的後台業務層分別來自.NET平台、J2EE平台和Unix平台,我不能說Ajax架構的應用似乎就是統一Web 表現層。因為從今天看到他們的明天,也許會是, 一個ASP.NET V2+Atlas 的統一表現層,一個統一CAB+Smart Client 的統一表現層,也可以是一個WPF 3D的統一表現層,也可以是一個Xgl 案頭的統一層......

  第三,從這架構的層面上,你也能夠非常容易理解SOA或ESB概念,和SOA相比,Ajax架構的區別在於,Ajax有足夠的鬆散耦合,但它依然以應用的資料為中心,更多的是一個面向Messages的架構,而且對於流行的WS-*協議的支援非常有限。

  但是假如,今天你或你的團隊已經有了一個Ajax 架構的應用,那麼你是不是應該要小心選擇現有的Ajax架構,因為這些Ajax的特性,相對於目前的架構來說,是多麼小,但又可能會產生很大危害的一個因素。也許這樣的團隊並不多,也許也很多,但是只有我們從更高更深的層次來思考,那麼我們就能做出正確的選擇,並且從新的Ajax技術和研究中獲得好處。

   結論

  當我們回到文章的起點,我希望這樣能夠說明的我觀點,即Ajax-NET的架構或實現分為兩類,一類是基於Ajax應用程式架構的,一類是基於Ajax特性的,目前幾乎大部分的Ajax-NET的架構或實現都是基於Ajax特性,以Add-in 方式提供的代碼或架構。

  Ajax-NET的實現/架構選取上的建議:

  ASP.NET控制項形式已經成為串連伺服器和用戶端Ajax通訊的主要形式和選擇。

  用戶端調用伺服器端頁面中的方法是Ajax的重要手段,使得用戶端可以更加靈活的獲得伺服器端的資料。

  MagicAjax.NET,Anthem.NET用了"Hook ASP.NET"和Add-In的技術手段,使用上受到的影響比較多,這兩個架構中,最簡單的應用,第一選擇MagicAjax.NET,但總是優先使用Anthem.NET。

  如果是自己寫的伺服器端控制項,那麼應該先掌握Anthem.NET的技術,然後使自己的控制項擁有Ajax的特性。

  MagicAjax.NET, Anthem.NET和wwHoverPanel 對於國際化的支援都有待加強。

  在Atlas沒有正式發布之前,在ASP.NET的應用中優先在自己的項目中使用類似wwHoverPanel的技術,即儘可能的使用用戶端回調功能,在特別需要的地方使用其方法調用的功能,充分發揮Ajax的特性,而不要因為Ajax而特意選擇某個Ajax的架構。

  Atlas的強項在於伺服器端和用戶端控制項特性的整合、用戶端的資料繫結、校正、內建的多個用戶端Ajax 特性UI或組件,與ASP.NET的Profile, Membership ,Role 服務的整合,與Web Services和WCF 服務的整合,以及良好的國際化/開發工具支援的。因為它是一個完整的解決方案,所以最大的弱點是不能很容易地被老的Ajax架構的應用使用。另外該產品目前還在不斷開發中,距離部署到生產環境中的要求還有差距。

  輕量級的雙向序列化可以考慮JSON格式,安全問題可以在傳遞的對象中增加欄位,然後在伺服器端進行校正。

  對於原來已經有一套序列化架構的組織來說,其主要的目標是儘快將這個架構遷移/升級到ASP.NET V2,而不是優先考慮實現某個Ajax的特性。

  Ajax 要求有足夠的力量關注前端的UI展現或開發,所以對Ajax實現/架構的選擇,最先要考察其用戶端的實現以及提供的Web UI。

  看完這篇文章,我希望,今後我們再談起Ajax的時候,作為技術人員,我不用談論什麼Web 2.0,我一樣可以清楚的表達Ajax的概念
如果你是一個架構師,Ajax 不再是什麼非同步XMLHTTP調用,不再是不重新整理頁面,它可以幫忙你Review應用程式的架構。

  對於你的團隊或老闆來說,Ajax可以是你統一介面表現層的一個策略,同樣也可能讓你有了一個建立一套部門或公司級能夠重用的UI類庫的機會。

  同樣對於Javascript的開發人員來說,Ajax讓你們還需要瞭解一些業務,並證明前台的Web開發人員一樣很昂貴,後台開發也可以是技術含量不高的。

  對於SOA的愛好者來說,Ajax架構讓你能夠站在面向訊息的架構和系統上來看面向服務;一般我們說,對內你首先要有一套面向訊息的架構,然後對外你就很容易延伸成一個面向服務面向Internet的分布式架構。

  最後,不要討論Ajax的消亡,因為Ajax對於程式員來說,是一種力量均衡的策略,在Ajax中,Web前端的開發人員被重新重視,成為一支重要的力量。

   後記

  寫這些文字的某幾個段落,讓我有些痛苦,因為我本來沒想些這麼多。所以你不要太在意我對各個架構的評價和描述,這些都是技術的層面的東西,其實我寫這篇文字,主要是想突出Ajax的架構觀,以及設計模式和Web應用架構重構的考慮,續而你也能夠用類似橫切面的角度,用Ajax來看你目前的應用和架構,從而更深的瞭解分布式對象的序列化、效能、安全以及Ajax 和ASP.NET伺服器端控制項的融合。最後歡迎大家斧正。
  • 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.