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

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

2022-06-13   來源: Java核心技術 

  O/R Mapping
  O/R Mapping的全稱是Object Relational Mapping主要目的是在傳統RDBMS與OO Language之間建映射關系從而使開發人員徹底脫離數據持久這片剪不斷理還亂的苦海
  
  關於O/R Mapping或者近來比較熱門的O/X Mapping(大家可以參考程序員P可能需要專門的文章進行詳細論述本文的目的主要是對現有方案的優缺點進行簡單剖析以及提供一些實踐中的參考信息
  
  相比較JEE平台NET下的O/R Mapping可謂沒什麼歷史至今還尚未有經過考驗的成熟的可用方案但是隨著各大廠商的重視以及開源項目的如火如荼NET O/R Mapping的步伐也開始慢慢跟上使這塊本屬於JEE的領地加入了新的競爭對手(會不會使更多的開發人員投入NET陣營?J)也讓眾多疲於在SQL Clause或ADONET中來回奔命的DAL開發人員看到了光明之路
  
  接下來就讓我們一起看看在這片比ADONET更廣闊的土地上有些什麼值得探討的Solution
  
  Open Source
  開源方面一直與NET保持一定距離O/R Mapping更是寥寥無幾但就作者的下載試用和源碼分析來看個人以為如下的兩個解決方案還是有一定參考價值的OPFOJB
  
  有關這兩個開源項目的簡介大家可以參考程序員P
  
  OPF的全稱是Object Persistent Framework
  
  OJB的全稱是ObJect Relational Bridge
  
  在實現手法上這兩個方案的思路完全不同具有各自的代表性
  
  OPF走的路線有點類似於Typed DataSet或Borland ECO(請參考下面的介紹)實現比較簡單提供更多的源碼級控制而OJB的實現則類似於Microsoft ObjectSpaces(請參考下面的介紹)采用了配置文件的方式相對就比較復雜了
  
  這兩個方案的基本框架如下所示
  
  OPF
  
 

  從圖中不難看出
  
  ()  Persistent類扮演了DataSet的角色除了常規的對象數據操作外還可以設定不同對象間的關系(如主從關系集合關系等這一點在Borland ECO所生成的代碼中也可略見一二)這也是上文所說提供更多源碼級控制的原因所在
  
  ()  PersistentSqlDataManager則扮演了DataAdapter的角色通過預先設置的Commands來執行真正的數據庫操作在實際撰寫的employee data manager中開發人員確實需要提供基本的SQL語句就像在SqlCommond中設置的那樣(Borland ECO則更進一步以OCL代替了SQL)
  
  ()  ObjectBroker的作用非常重要它是對象與數據間的橋梁RegisterPersistent方法建立了這種虛擬(Object)與現實(RDBMS)間的關系
  
  ()  在employee business object的聲明中對象屬性與數據庫字段的對應關系是通過NET Attribute機制體現的所以修改起來還是比較方便的雖然相比配置文件的方式顯得不夠靈活(請參考OJB的介紹)比如需要重新編譯開發人員不得不關注數據庫字段等
  
  OJB
  

  從圖中不難看出
  
  ()  該方案的實現比較復雜但用戶需要實際撰寫的代碼變少了(只需要編寫employee business object)這其中的關鍵就在於引入了配置文件同時由於配置文件的引入我們在hello world application中也不需要調用類似OPF解決方案(請參考上文的OPF類圖)中的RegisterObject方法所有這一切(甚至包括數據庫連接信息)系統都已了如指掌!
  
  ()  該方案中SQL命令通過Criteria類被徹底替代而QueryFacade則充當了Adapter的功能通過PersistenceBroker這一真正的Command與數據庫進行通信
  
  ()  無論是repositoryxml配置文件還是CriteriaQueryFacade類我們都可以在ObjectSpaces(請參考下面的介紹)中找到類似的實現(難道是巧合?)同時作者個人以為這種方式也更符合O/R Mapping的精神減輕了開發人員的負擔!
  
  ()  OJB還有一個非常cool的工具repositorygenexe可以用來生成repositoryxml配置文件(同樣的源碼無償奉上J)這一點甚至連ObjectSpaces都沒能做到(想想那麼多字段屬性關聯映射簡直可以讓人發瘋)!
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25578.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.