熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

基於.Net Framework的N層分布式應用開發(2)

2013-11-13 09:51:19  來源: .NET編程 

  Net Framework下的層間(遠程)傳輸對象及技術
  
  Net Framework實現了許多新的技術以支持多層分布式處理它提供了豐富的類庫對象及方法使得在不同層(物理上分離或僅僅是邏輯上分離)間的數據傳輸更為簡單
  
  支持遠程數據傳送的對象
  
  l ADONET DataSet對象
  
  l ADONET DataTable對象
  
  l XmlDocument對象
  
  l XmlDataDocument對象
  
  支持遠程數據傳送的類/方法
  
  l Serialization類
  
  Serialization類描述了一個將數據轉換為一種能復制到另一個過程的格式的對象的過程前面提及的可遠程傳輸的對象具有串行化整個內容的能力以便它可以通過一個通道來傳送這個通道可以直接通過TCP/IP或者通過HTTP當然它們也可以在另一端解除串行化因此客戶機就得到一個原對象的完整副本
  
  l SystemRuntimeRemoting類
  
  SystemRuntimeRemoting命名空間提供的對象可用來為對象創建代理以實現遠程數據傳送在這種情形下對象保留在服務器上並且客戶機只收到一個代理對象的引用這個代理對象表示原來的基於服務器的對象(這就是我們怎樣遠程使用一個DataReader的方法)示意如下圖
   
  對於客戶機這個代理提供了與原始對象相同的方法和屬性然而當客戶機與代理對象相互作用時調用被自動串行化並通過通道(網絡)傳送給服務器上的對象然後任何響應和結果通過通道被傳送回客戶機
  
  這兩個遠程技術都允許客戶機使用原來在服務器上創建的對象我們能夠串行化一個DataSet對象或者Xml文檔同時我們也能串行化其它的如集合這樣的對象比如一個哈希表(Hashtable)或數組(Array)
  
  N層模型中的數據處理及對象選擇
  
  首先需要考慮的是希望從數據存儲中提取出來的數據做些什麼?這個問題的答案對我們所使用對象的基本選擇的影響將比其他任何事情都要大甚至在某種程度上定義了我們希望完成任務的性能的種類
  
  只用於顯示的數據
  
  如果只是想以一種固定格式為終端用戶顯示數據的話一般來說根本就沒有必要遠程傳輸數據我們沒有必要在線上將所有的數據傳送給客戶機我們只能傳給它們客戶設備能接受的任何格式的最終顯示信息
  
  在這種情形中Reader對象提供了一種只讀的僅向前的理想且性能最優的技術當與能實現服務器端數據綁定的服務器控件一起使用時我們可以獲得一個顯示數據的高效方法
  
  需要遠程傳輸的數據
  
  然而如果我們需要遠程傳輸數據的話則存在一個問題這些快速而高效的Reader對象只在作為一個引用時才能被遠程傳輸將一個DataReader作為引用傳送給一個客戶機時DataReader仍還在服務器上不過客戶機的應用程序也可以使用它在這種情況下我們實際上並沒有遠程傳輸數據而是使用了一個遠程傳輸對象在很多情況下都存在這種情況
  
  要實現數據的遠程傳送應該將數據寄存到一個能夠存儲(或保持)數據的對象中並允許代碼不需進入數據存儲的額外行程就可以根據需要提取數據並且多次讀取在ADONET中這個對象就是DataSet對象(或者DataTable對象)當使用xml時也有幾個對象供選擇我們能夠遠程傳輸XmlDocument和XmlDataDocument對象這兩個對象都有保持內容的能力並且可以在一個應用程序的層之間進行傳送
  
  N層分布式數據處理架構模型
  要進一步理解怎樣在應用程序中劃分不同的層需要確定數據如何顯示以及是否需要更新數據和向服務器及時返回更新
  
  全部在服務器上完成顯示
  
  在客戶機上顯示數據最常見的情形是在一組或者多組服務器上執行所有的數據處理數據層和中間層限於服務器客戶機只提供顯示接口對於一個web浏覽器來說通常的格式為html對於一個蜂窩式電話或類似設備來說可能是以wml格式表示等等
  
  下圖使用一個存儲過程或SQL語句來提取所需要的數據然後用進行處理或者執行一個web服務另外這裡也用xml片段的形式從數據存儲中提取數據然後對數據進行處理並提供給客戶機
   
  如果以xml文檔形式存儲數據或者以這樣一種格式存儲數據數據作為xml外置數據層那麼我們就有一些其他的選擇
  
  下圖顯示了怎樣提取和處理xml數據以便傳送給客戶機使用此外數據的提取其實就是借助一個Reader對象並且可以使用不同的技術來處理數據並將數據提供給客戶機
   
  擴展中間層
  
  雖然數據的提取和處理經常在一個對象裡發生比如一個AspNet頁面但是為了有效利用由於使用基於組件的設計而提供的好處通常需要提供更為精細的架構我們應該有在顯示數據或者將其傳送給客戶機之前應用於數據的商務規則換句話說它可能是因為安全的原因也可能是為了實現分布式處理或者只是提供可重用性和使應用程序的維護更加容易
  
  例如應該有訪問一個數據存儲並提取一系列消費者的多個頁面通過在一個獨立於頁面或其他提供數據給客戶機的對象的組件中建立這個過程我們能夠提供一個提取數據的層然後我們在將來需要在某些方面改變數據存儲或者數據結構或者改變訪問它的規則我們只要用一個新的版本替換組件即可
  
  只要組件的接口仍然未變所有使用這個接口的應用程序將看到來自組件的相同輸出並和以前一樣繼續運行然而組件在內部用來提取和處理來自數據存儲的數據的方法可以根據需要進行相應修改下圖示意了這種架構
   
  顯然該過程可以使用多個組件如果數據的提取相當復雜或者同一數據運用在多個地方的話進一步分解數據處理(分解為更多組件層)就很有意義例如可用一個組件將數據當作一系列包含所有必須列的行(以關鍵字順序排列)這個組件就可以成為其他以不同順序存儲數據的組件或者僅外置數據的某些列的組件的數據源
  
  移動數據處理到客戶機
  
  一般地要獲得發送給客戶機的數據我們將利用客戶端腳本(JavaScript或 VBScript以及 WMLScript)用Java或者一個特定平台的語言書寫的客戶端組件或者用諸如Visual Basic C++Delphi等語言書寫的客戶端可執行程序等等當然所有我們需要的功能都是Net Framework的一部分(用戶可通過下載和安裝可重新分配的Framework(大約MB)在客戶機上使用Framework)
  
  因此下面的示意圖顯示了一些用於實現獲得發送給客戶機的數據並在客戶機上進行處理的方法
   
  將更新回送給服務器
  
  在許多情況下如果我們的要求就是以一種盡可能快速和高效的方式獲得發送給客戶機的依據那麼上面的示例能很好地完成任務然而許多應用程序要求客戶機將數據回送以更新數據存儲等操作時就需要尋找更合理的模式
  
  至少有三種方法用於向服務器端回送數據一是回送Html表單和查詢字符串(實現方式與以前的ASP類似)另一是客戶端組件(例如IE及以上版本的XMLHTTP組件)還有就是客戶端可執行的Windows表單應用程序和服務等
  
  因此應該有這樣一種情況客戶機僅僅要求我們發送一些數據並且我們讓客戶機完成所有的數據處理也就是說客戶機充當某種類型的服務它將應用程序的數據作為自己的源數據來使用然後在它的客戶機已經處理數據後將更改提交回來
  
  一旦客戶端完成了數據更新或者已經收集了用戶輸入的新數據客戶機應用程序就以一種合適的格式打包數據(或者用正確的技術整理數據)並將它提交給服務器進行處理和存儲
  
  下圖顯示了利用胖客戶機來實現這種架構的方法其中數據在客戶機上進行處理然後經整理後返回給服務器來更新原始的數據存儲
  
  仍然地這不是一個包含所有可能性的圖表回送數據的方法或許和發送數據的方法沒有什麼聯系你應該根據應用程序的實際需求設計合適的模型
  
  結束語
  建立可維護可擴展的站點開發高效率高伸縮性的應用程序實現跨平台跨Internet的應用集成創建N層分布式應用程序是擺在無數開發者面前的任務傳統開發方式及技術面臨了困難
  
  Net Framework推出的許多新技術為這些任務的實現提供了相對簡單的解決方案其中基於SOAP的Web Service在處理分布式應用時具有比傳統的DCOM/CORBA明顯的優點結合基於Web的ASPNET頁面開發技術和SQLServer數據存儲技術(或Xml文檔)Net下開發N層應用程序也不再困難
From:http://tw.wingwit.com/Article/program/net/201311/11758.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.