分布式应用架构中的数据传输对象(DTO)
分布式應用架構中的數據傳輸對象(DTO)
?
Written by: Rickie Lee
Dec. 1, 2004
在分布式架構中,相關層在物理部署上實現分離,通過網絡或跨進程調用遠程對象或服務。在這種分布式架構中,需要定義有效的數據傳輸對象(Data Transfer Object, DTO)來實現層與層之間的數據傳輸。
因為遠程調用需要跨越網絡或進程,因此會比較慢。通過使用DTO,在單一遠程調用中傳輸更多的數據信息,減少遠程調用的次數,提高分布式調用的性能。
?
下面分析一些比較常用的數據傳輸對象(DTO):
1.DataSet
DataSet是緩存在內存中的表,它是從關系數據庫或 XML 文檔中獲得的。可以使用 DataSet來表示從數據庫中檢索到的業務實體數據,然后可以在層與層之間使用DataSet來傳遞數據。Microsoft提供的范例Duwamish 7.0中使用大量的DataSet來實現層與層之間的數據傳遞,如Presentation層與BusinessFacade層等等。
優點:(1)DataSet類由.Net Framework內置實現,不必編寫和維護額外的類。(2)DataSet可以與Windows Form和Web Form的內置控件直接交互,如DataGrid等。(3)DataSet支持序列化XML,不僅包括內容序列化,還包括Schema。(4)非連接的數據模式。(5)DataSet 可以包含數據的集合,能夠表示復雜的數據關系。
缺點:(1)互操作性問題,因為DataSet類是ADO.NET提供的,因此要求Client端在.Net Framework平臺上運行。(2)陳舊的數據,因為DataSet包含的數據是Database的快照,如果Database的數據經常改變,則不推薦采用DataSet。(3)依賴Database schema,訪問DataSet中數據時,要求顯式指定字段類型和數據表之間的關系,如果Database schema發生變化,相應的code也要變化。要訪問 DataSet 中的表,客戶端代碼必須使用整數索引生成器或字符串索引生成器來索引 DataTable 集合。要訪問特定列,必須使用列編號或列名稱索引 DataColumn 集合。(4)缺乏類型安全,當從DataSet中取值時,需要顯式指定要轉換的數據類型,這樣容易產生錯誤。(5)性能問題。實例化和封送處理 DataSet 會增加運行時負擔。
?
2.有類型的DataSet
有類型的DataSet是從 ADO.NET DataSet 類繼承而來的類,包含具有嚴格類型的方法、屬性和類型定義以公開 DataSet 中的數據和元數據的類。
優點:除了上述DataSet的部分優點外,有類型的 DataSet 還提供了數據驗證支持(在編譯時進行類型檢查,無效的表名稱和列名稱將在編譯時而不是在運行時檢測),并且簡化代碼的編寫,提高代碼的可讀性。
缺點:(1)具有DataSet的大部分缺點,除了提供類型安全。(2)另外,需要編寫或維護用來描述typed interface的XML Schema,不過幸好VS.Net IDE提供工具支持。(3)部署問題。必須將包含有類型的 DataSet 類的程序集部署到使用業務實體的所有層。(4)可擴展性問題。如果修改了數據庫架構,則可能需要重新生成有類型的 DataSet 類以支持新架構。重新生成過程將不會保留在有類型的 DataSet 類中實現的任何自定義代碼。必須將包含有類型的 DataSet 類的程序集重新部署到所有客戶端應用程序中。
?
有類型的方法和屬性的提供使得使用有類型的 DataSet 比使用通用 DataSet 更方便。使用有類型的 DataSet 時,IntelliSense 將可用。有類型的 DataSet 的實例化和封送處理性能與通用 DataSet 基本相同。
?
3.自定義業務實體(Business Entity)
這是一種自定義類,用于表示各種業務實體類型??梢远x保存業務實體數據的字段,并定義將此數據向應用程序各層中公開的屬性(getter/setter),或者進一步使用在該類中定義的字段來定義方法以封裝簡單的業務邏輯。
應當封裝應用程序的功能的核心業務實體,而不是為每個表定義單獨的業務實體。
優點:(1)可維護性,更改架構一般不會影響數據訪問邏輯組件方法簽名。(2)相對DataSet而言,有更好的性能。(3)編譯期間提供類型安全檢測。(4)代碼易讀。要訪問自定義實體類中的數據,可以使用有類型的方法和屬性。(5)自定義實體可以包含方法以封裝簡單的業務規則。(6)本地化驗證。自定義實體類可以在其屬性存取器(getter/setter)中執行簡單的驗證測試以檢測無效的業務實體數據。(7)專用字段??梢噪[藏不希望向調用程序公開的信息。
缺點:(1)需要編寫并維護自定義DTO類。(2)自定義實體表示的是單個業務實體,而不是一個業務實體集合。要保存多個業務實體,調用應用程序必須創建一個數組或一個 .NET 集合。(3)必須在自定義實體中實現自己的序列化機制??梢允褂脤傩詠砜刂茖嶓w組件的序列化方式,也可以通過實現 ISerializable 接口來控制自己的序列化。(4)部署問題。必須在所有物理層部署包含自定義實體的程序集。(5)可擴展性問題。如果修改了數據庫架構,則可能需要修改自定義實體類并重新部署程序集。
?
4.簡單標量參數列表
根據需要傳入的參數,傳入一系列簡單的標量值。
優點:(1)標量值本身支持序列化。(2)內存使用效率高,標量值只傳遞實際調用需要的數據。(3)更高的性能。(4)最明顯的特點是簡單方便。
缺點:(1)緊密耦合與維護。架構的更改可能需要修改方法簽名,這會影響調用代碼。(2)有可能存在進行多次單獨的方法調用,這在分布式環境中會給性能帶來很大影響。(3)難以表達復雜的數據關系。
?
當然,在實際的分布式應用系統中,會根據實際情況的要求,使用不同的DTO對象。
下面通過描述簡單的分布式應用架構模型設計,來演示DTO對象在層與層之間的數據傳遞和交互:
References:
1. Angela Crocker, Andy Olsen, Edward Jezierski, Microsoft, 設計數據層組件并在層間傳遞數據, http://www.microsoft.com/china/msdn/archives/library/dnbda/html/BOAGag.asp
總結
以上是生活随笔為你收集整理的分布式应用架构中的数据传输对象(DTO)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 付款方式第三方付是什么意思
- 下一篇: 1赔4是什么意思 常见于体育赛事和商品消