NHibernate體系結構
對NHibernate體系結構的非常高層的概覽:
這幅圖展示了NHibernate使用數據庫和配置文件數據來為應用程序提供持久化服務(和持久化的對象)。
我們試圖顯示更多NHibernate運行時體系結構的細節。 但挺不幸的,NHibernate是比較靈活的並且提供了好幾種不同的運行方式。我們展示一下兩種極端情況。輕型體系中,應用程序自己提供ADO.NET連接,並且自行管理事務。這種方式使用了NHibernate API的一個最小子集。
全面解決體系中,對於應用程序來說,所有的底層ADO.NET API都被抽象了,NHibernate會替你照管所有的細節。
下面是圖中一些對象的定義:
- SessionFactory (
NHibernate.ISessionFactory
-
對屬於單一數據庫的編譯過的映射文件的一個線程安全的,不可變的緩存快照。它是
Session
的工廠,是ConnectionProvider
的客戶。可以持有一個可選的(第二級)數據緩存,可以在進程級別或集群級別保存可以在事物中重用的數據。 - 會話,Session (
NHibernate.ISession
) -
單線程,生命期短促的對象,代表應用程序和持久化層之間的一次對話。封裝了一個ADO.NET連接。也是
Transaction
的工廠。保存有必需的(第一級)持久化對象的緩存,用於遍歷對象圖,或者通過標識符查找對象。 - 持久化對象(Persistent)及其集合(Collections)
-
生命期短促的單線程的對象,包含了持久化狀態和商業功能。它們可能是普通的對象,唯一特別的是他們現在從屬於且僅從屬於一個
Session
Session
被關閉,他們都將從Session
中取消聯系,可以在任何程序層自由使用(比如,直接作為傳送到表現層的DTO,數據傳輸對象)。 - 臨時對象(Transient Object)及其集合(Collection)
-
目前沒有從屬於一個
Session
的持久化類的實例。他們可能是剛剛被程序實例化,還沒有來得及被持久化,或者是被一個已經關閉的Session
所實例化的。 - 事務Transaction (
NHibernate.ITransaction
) -
(可選) 單線程,生命期短促的對象,應用程序用它來表示一批工作的原子操作。是底層的ADO.NET事務的抽象。一個Session某些情況下可能跨越多個
Transaction
- ConnectionProvider (
NHibernate.Connection.ConnectionProvider
) -
(可選)ADO.NET連接的工廠。從底層的
IDbConnection
抽象而來。對應用程序不可見,但可以被開發者擴展/實現。 - TransactionFactory (
net.sf.hibernate.TransactionFactory
) -
(可選)事務實例的工廠。對應用程序不可見,但可以被開發者擴展/實現。
在上面的輕型結構中,程序沒有使用Transaction
/ TransactionFactory
或者ConnectionProvider
API,直接和ADO.NET對話了。
NHibernate體系結構