熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

設計數據層組件並在層間傳遞數據

2013-11-11 21:47:18  來源: Windows系統管理 

  適用於
  Microsoft® NET 應用程序
  
  摘要學習向 Microsoft NET 應用程序公開數據的最佳方式以及如何實現一個有效的策略以便在分布式應用程序的層間傳遞數據(本文包含一些指向英文站點的鏈接
  
  目錄
  簡介
  將關系數據映射到業務實體
  實現數據訪問邏輯組件
  實現業務實體
  事務處理
  驗證
  異常管理
  授權與安全性
  部署
  附錄
  合作者
  簡介
  在設計分布式應用程序時需要確定如何訪問和表示與該應用程序相關聯的業務數據本文提供一些指導原則以幫助您選擇公開數據保持數據和在應用程序的層間傳遞數據的最佳方式
  
  圖 所示為分布式應用程序中的常見層本文區分業務數據與使用這些數據的業務過程並且僅在需要明確說明時討論業務過程層同樣本文僅在直接涉及數據表示方式(例如 Microsoft® ASPNET Web 頁面公開業務數據的方式)時討論表示層 中使用了兩個新術語數據訪問邏輯組件和業務實體組件本文後面將解釋這些術語
  
   
  
  圖 分布式應用程序中數據的訪問與表示
  
  多數應用程序將數據存儲在關系數據庫中除此之外還有其他數據存儲方式但本文重點討論 NET 應用程序與關系數據庫交互的方式而並不專門討論它如何與平面文件非關系數據庫等其他數據存儲中的數據進行交互
  
  本文明確區分保持邏輯與數據本身將保持邏輯與數據區分開來的原因如下
  
  獨立的數據保持組件可以將應用程序與數據源名稱連接信息字段名等數據庫相關內容隔離開
  現在的許多應用程序都采用 XML Web servicesMicrosoft 消息隊列(亦稱 MSMQ)等松散耦合的基於消息的技術這些應用程序通常通過傳遞業務文檔而不是傳遞對象進行通信
  為區分保持邏輯與數據本身本文提出了兩種不同的組件類型
  
  數據訪問邏輯組件數據訪問邏輯組件從數據庫中檢索數據並把實體數據保存回數據庫中數據訪問邏輯組件還包含實現數據相關操作所需的所有業務邏輯
  業務實體組件數據用來表示產品訂單等現實世界中的業務實體在應用程序中表示這種業務實體的方法非常多例如 XMLDataSet面向對象的自定義類等這取決於應用程序的物理和邏輯設計限制本文後面將詳細討論各種設計方案
  數據訪問邏輯組件
  數據訪問邏輯組件代表調用程序提供對數據庫執行以下任務的方法
  
  在數據庫中創建記錄
  讀取數據庫中的記錄並把業務實體數據返回給調用程序
  使用調用程序提供的修改後的業務實體數據更新數據庫中的記錄
  刪除數據庫中的記錄
  執行上述任務的方法通常稱為CRUD方法這是由各項任務的首字母組成的一個縮寫詞
  
  數據訪問邏輯組件還提供對數據庫實現業務邏輯的方法例如數據訪問邏輯組件可能包含一個查找目錄中本月銷售額最高的產品的方法
  
  通常數據訪問邏輯組件訪問一個單一數據庫並封裝了針對該數據庫中一個表或一組相關表的數據相關操作例如可以定義一個數據訪問邏輯組件來處理數據庫中的 Customer 表和 Address 表同時定義另一個數據訪問邏輯組件來處理 Orders 表和 OrderDetails 表本文後面將討論將數據訪問邏輯組件映射到數據庫表的設計決策
  
  表示業務實體
  每個數據訪問邏輯組件都處理一種特定類型的業務實體例如Customer 數據訪問邏輯組件處理 Customer 業務實體表示業務實體的方式很多這取決於諸如以下因素
  
  是否需要把業務實體數據與 Microsoft Windows® 窗體或 ASPNET 頁面中的控件綁定在一起?
  是否需要對業務實體數據執行排序或搜索操作?
  應用程序是每次處理一個業務實體還是通常處理一組業務實體?
  是本地部署還是遠程部署應用程序?
  XML Web services 是否使用該業務實體?
  性能可縮放性可維護性編程方便性等非功能性要求的重要程度如何?
  本文將概述以下實現選項的優缺點
  
  XML使用 XML 字符串或 XML 文檔對象模型 (DOM) 對象來表示業務實體數據XML 是一種開放而靈活的數據表示格式可用於集成各種類型的應用程序
  DataSetDataSet 是緩存在內存中的表它是從關系數據庫或 XML 文檔中獲得的數據訪問邏輯組件可以使用 DataSet 來表示從數據庫中檢索到的業務實體數據您可以在應用程序中使用該 DataSet
  有類型的 DataSet有類型的 DataSet 是從 ADONET DataSet 類繼承而來的類它為訪問表和 DataSet 中的列提供了具有嚴格類型的方法事件和屬性
  業務實體組件這是一種自定義類用於表示各種業務實體類型您可以定義保存業務實體數據的字段並定義將此數據向客戶端應用程序公開的屬性然後使用在該類中定義的字段來定義方法以封裝簡單的業務邏輯此選項並不通過 CRUD 方法實現與基礎數據訪問邏輯組件的數據傳遞而是通過客戶端應用程序直接與數據訪問邏輯組件進行通信以執行 CRUD 操作
  帶有 CRUD 行為的業務實體組件按上述方法定義一個自定義實體類並實現調用與此業務實體相關聯的基礎數據訪問邏輯組件的 CRUD 方法
  注意如果希望以一種更加面向對象的方式使用數據可以使用另一種替代方法即定義一個基於公共語言運行庫的反射功能的對象保持層您可以創建一個使用反射功能來讀取對象屬性的架構並使用映射文件來描述對象與表之間的映射然而要有效地實現上述方法需要大量的基礎結構代碼投入對於 ISV 和解決方案提供商來說這種投入或許可以接受但對於大多數組織則不可行有關這方面的討論超出了本文的范圍這裡不再論述
  技術因素
  圖 所示為影響數據訪問邏輯組件和業務實體實現策略的一些技術因素本文將分別討論這些技術因素並提供相關建議
   
  圖 影響數據訪問邏輯組件和業務實體設計的技術因素
  
  將關系數據映射到業務實體
  數據庫通常包含許多表這些表之間的關系通過主鍵和外鍵來實現當定義業務實體以在 NET 應用程序中表示這些數據時必須確定如何把這些表映射到業務實體
  
  請考慮圖 所示的假想零售商數據庫
   
  圖 假想的關系數據庫中的表關系
  
  下表總結了示例數據庫中的關系類型
  
  當定義業務實體以在數據庫中建立信息模型時應考慮要如何在您的應用程序中使用這些信息應當標識封裝您的應用程序的功能的核心業務實體而不是為每個表定義單獨的業務實體
  
  該假想零售商的應用程序中的典型操作如下
  
  獲取(或更新)客戶的有關信息(包括地址)
  獲取客戶的訂單列表
  獲取特定訂單的訂購項目列表
  創建新訂單
  獲取(或更新)一個或一組產品的有關信息
  為滿足這些應用程序要求該應用程序要處理三個邏輯業務實體CustomerOrder 和 Product對於每個業務實體都將定義一個單獨的數據訪問邏輯組件如下所示
  
  Customer 數據訪問邏輯組件此類將為檢索和修改 Customer 表和 Address 表中的數據提供服務
  Order 數據訪問邏輯組件此類將為檢索和修改 Order 表和 OrderDetails 表中的數據提供服務
  Product 數據訪問邏輯組件此類將為檢索和修改 Product 表中的數據提供服務
  圖 所示為這些數據訪問邏輯組件與它們所表示的數據庫中的表之間的關系
   
  圖 定義向 NET 應用程序公開關系數據的數據訪問邏輯組件
  
  有關如何實現數據訪問邏輯組件的說明請參閱本文後面的實現數據訪問邏輯組件
  
  將關系數據映射到業務實體的建議
  要將關系數據映射到業務實體請考慮以下建議
  
  花些時間來分析您的應用程序的邏輯業務實體並為之建立模型不要為每個表定義一個單獨的業務實體建立應用程序的工作方式模型的方法之一是使用統一建模語言 (UML)UML 是一種形式設計注釋用於在面向對象的應用程序中建立對象模型並獲取有關對象如何表示自動過程人機交互以及關聯的信息
  不要定義單獨的業務實體來表示數據庫中的多對多表可以通過在數據訪問邏輯組件中實現的方法來公開這些關系例如前面示例中的 OrderDetails 表沒有映射到單獨的業務實體而是通過在 Order 數據訪問邏輯組件中封裝 OrderDetails 表來實現 Order 與 Product 表之間的多對多關系
  如果具有返回特定業務實體類型的方法請把這些方法放在該類型對應的數據訪問邏輯組件中例如當檢索一個客戶的全部訂單時返回值為 Order 類型因此應在 Order 數據訪問邏輯組件中實現該功能反之當檢索訂購某特定產品的全部客戶時應在 Customer 數據訪問邏輯組件中實現該功能
  數據訪問邏輯組件通常訪問來自單一數據源的數據當需要聚合多個數據源的數據時建議分別為訪問每個數據源定義一個數據訪問邏輯組件這些組件可以由一個能夠執行聚合任務的更高級業務過程組件來調用建議采用這種方法的原因有二
  事務管理集中在業務過程組件中不需要由數據訪問邏輯組件顯式控制如果通過一個數據訪問邏輯組件訪問多個
From:http://tw.wingwit.com/Article/os/xtgl/201311/9238.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.