熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

剖析.Net下的數據訪問層技術(4)

2013-11-23 19:01:15  來源: Java核心技術 

  Microsoft ObjectSpaces
  這是一個在幾年前就讓眾多NET guy伸長脖子激動不已的技術就作者來說那個時候只要一提起這個話題一般都是在JEE guy的嘲笑聲中悻悻而歸恨不能自己也搞個ENB(相對EJB)或者NCMP(相對CMP)什麼的
  
  終於我們可以在NET Framework (可在VSNET Whidbey或Yukon中找到目前都是Beta版本)中一睹其芳容了J
  
  首先讓我們看看用ObjectSpaces寫出的代碼是什麼樣子(依然使用上面的employee例子)
  
  // 初始化ObjectSpace
  
  SqlConnection conn = new SqlConnection(Data Source=localhost;
  
  Integrated Security=SSPI; Database=Northwind);
  
  ObjectSpace os = new ObjectSpace(mapxml conn);
  
  // 根據EmployeeID返回其Title
  
  Employee oEmp = (Employee)osGetObject (
  
  new ObjectQuery(typeof(Employee) ID = ));
  
  // 注意實際字段名為EmployeeID
  
  string strTitle = oEmpTitle;
  
  ……
  
  // 根據 City 返回所有符合條件的 Employee
  
  ObjectSet oSet = osGetObjectSet(
  
  new ObjectQuery(typeof(Employee) City = Seattle));
  
  // 注意返回的不是DataTable而是對象集合
  
  foreach (Employee oEmp in oSet)
  
  {
  
  …… // 注意在這裡可以對oEmp做任何操作
  
  }
  針對上面第二段代碼還有一種解決方案就是以ObjectReader替代ObjectSet這其中所包含的差異類似於ADONET (包含ObjectSpacesd的ADONET又稱為ADONET )中的DataSet / DataTable與DataReader間的不同(不得不佩服Microsoft在前後一致性上表現出的老謀深算J)
  
  仔細分析上面的代碼就可以發現它和前面討論的OJB有驚人的相似點(OJB中作者只畫了基本類圖但足可看出這種思想上的接近)!
  
  例如ObjectSpace類基本上提供了OJB中的QueryFacade功能ObjectQuery類基本上提供了OJB中的Criteria功能同時兩種解決方案又不約而同的使用了配置文件來存儲O/R Mapping信息而應用程序一般也就通過這個類進行數據操作非常方便稍微有些區別的可能是在數據返回格式上(這一點ObjectSpaces考慮得更細致可以參考上面的代碼)但這已經對實際的代碼實現影響不大了
  
  如果將ObjectSpaces下的調用代碼與前面給出的那段在ADONET下撰寫的代碼作個比較不難看出ObjectSpaces給出的代碼更易閱讀和理解就算不熟悉ADONET整體架構的開發人員也可輕松上手(唯一涉及RDBMS的代碼只有建立數據庫連接時需要)對於已經熟悉ADONET或曾接觸過O/R Mapping(如JEE下的Hibernate)的朋友來說真可謂小菜一碟!
  
  從NET Framework 文檔中可以知道ObjectSpaces總共提供了個命名空間整體結構非常清晰
  
  SystemDataObjectSpaces
  
  SystemDataObjectSpacesQuery
  
  SystemDataObjectSpacesSchema
  
  ObjectSpacesQuery已在上面的代碼中見識過從名字中可以猜出它們主要負責向外提供基本訪問接口(如查詢增 / 刪 / 改等)和解析各種查詢條件(如對象過濾等)Schema命名空間則主要用來操作O/R Mapping配置文件並為其它兩個命名空間中的類提供服務
  
  在ObjectSpaces中O/R Mapping配置文件主要指mapxml這個文件的名字是可以隨意更換的比較類似OJB中的repositoryxml另外兩個分別描述數據庫結構和對象結構的配置文件也非常重要RSDxml(Relational Schema Definition)OSDxml(Object Schema Definition)可以將它們理解為Typed DataSet中的XSD文件沒有它們所有的數據 / 對象Mapping和Validation都將是非法的J!
  
  本文中作者不准備對ObjectSpaces來個深度探索也不會提供什麼Sample說明其優越性這方面NET Framework SDK早已為大家提供了豐富套餐
  
  作者只是希望如果從DAL的角度來分析ObjectSpaces技術能為我們帶來什麼是否意味著從此告別DataReader / DataSet抑或為開發人員帶來了新的煩惱?
  
  好處不多說僅舉數例即可明了
  
  ()  ObjectSpaces全部采用對象方式訪問數據大大緩解了很多開發人員的SQL(或者說RDBMS)恐懼症
  
  ()  對於比較簡單的數據庫結構變化只需要修改配置文件即可無需重新編譯代碼(較之OPF中將映射關系以NET Attribute方式封裝於代碼中顯得更加靈活方便)
  
  ()  對於比較復雜的數據庫結構變化由於只涉及對象操作所以修改的工作也要比以前簡單許多
  
  ()  采用了O/R Mapping配置文件後數據庫設計與DAL開發可以分別進行相互的影響也降到了最低點
  
  不足則是我們更須關注的話題
  
  ()  目前版本不支持中文(永遠的話題J)查詢不爽!
  
  ()  當前版本僅支持SQL Server 以上版本的數據庫系統弱(這是個很耐人尋味的限制有興趣的讀者不妨想想到底是什麼原因)!
  
  (引自NET Framework SDK Document就這兩點已排除了很多躍躍欲試的朋友而作者參與的NET項目雖不受影響但由於經常使用Oracle就不得不暫時忍痛割愛了J)
  
  ()  性能問題雖然ObjectSpaces也提供了類似DataReader的功能(ObjectReader)但畢竟需要進行一次數據強類型填充無論如何會有損失如果返回數據量變大將是一個不得不考慮的問題
  
  ()  還是性能問題mapxml是個好東東但如何優化對它的訪問以及進行正確的Validation(基於RSDxmlOSDxml)畢竟需要時間甚至在某些時候(數據庫結構比較復雜)這會造成比第點更為嚴重的後果
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26147.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.