1. 程式人生 > >NHibernate體系結構

NHibernate體系結構

info 直接 api http image wid edi 找對象 gif

對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體系結構