2011-11-08 15 views
0

今天我產品的數據訪問層使用Hibernate作爲OR映射框架。將來還想使用其他框架,比如iBatis。通過不同的OR映射框架進行抽象

  1. 什麼是設計上的這些OR映射框架頂部的這種抽象層的最佳方式?
  2. 有沒有這樣的框架可用?
  3. 我想要設計這樣一個系統,在簡單的配置更改下,我應該能夠在這些OR框架之間切換。

回答

1

我不認爲在hibernate/ibatis之上添加抽象是有道理的。他們是完全不同的框架 - 即使你能夠創建一個通用的API - 它將省去元數據部分(你的代碼更依賴於它)。你應該認真思考你爲什麼需要它以及它會是什麼樣子。 Already people are complaining about too many levels of abstractions - 增加更多隻會使事情變得更加困難。

更好的解決方案是將絕大多數域邏輯與持久性/事務/安全性等等(域驅動設計)隔離開來。這樣,如果您必須更改其中一個的實現,您可能能夠保留應用程序邏輯的重要部分。

看看spring-data它與您正在尋找的抽象類型不同。

+0

謝謝。我現在正在考慮JPA。 Hibernate已經支持JPA。不確定關於iBatis。從標準的角度來看,它對我來說很好。 JPA可以是我正在尋找的抽象。有什麼想法嗎 ? – Siddharth

+0

JPA與Hibernate(就抽象層次而言)幾乎相同 - 只是一個標準化的API。否 - iBatis不支持JPA。 EclipseLink,OpenJPA等是其他一些實現。對於谷歌應用程序引擎,亞馬遜simpledb等,還有一個有限的JPA實現。是的,最好使用JPA 2.0與Hibernate作爲提供者而不是直接Hibernate。 – gkamal

0

問題是,iBatis不是ORM框架,而Hibernate是。 iBatis的要點是將具體的SQL語句映射到對象,而Hibernate試圖以更抽象的方式解決對象關係映射(和不匹配)。

幾年前,Hibernate核心功能的子集已經標準化爲JPA。做事JPA方式是有意義的(所以你可以切換JPA供應商--Hibernate,EclipseLink,ObjectDB)。

但是,在不同的方法(比如Hibernate和iBatis)之上構建一些抽象概念並沒有什麼意義。

0

首先,我完全同意Xorty關於iBatis與Hibernate框架的回覆。

除了一件事。你可以考慮在iBatis,Hibernate之間切換。 我建議你閱讀iBatis In Action一書,第10,11章。你會發現有一個iBatis配置的例子,可以讓你通過iBatis的sql映射文件,Hibernate和DAO模式來配置/使用iBatis和Hibernate JDBC。