2009-11-19 79 views
2

我知道NHibernate非常適合那些從頭開始創建新數據庫和構建項目的項目。但是,以我的經驗來看,企業應用程序通常不是這種情況。通常情況下,整合來自其他數據庫的遺留數據是新應用的重要組成部分。NHibernate for Enterprise應用程序?

當你打算處理無法控制的遺留數據庫結構時,NHibernate是否會比作爲ORM值得的更麻煩?

我知道構建數據服務和鬆散耦合的參數,並且會及時到來。但是,現在,如果我不得不使用來自兩個不同現有數據庫的15個表中的數據,除了存儲我自己的應用程序數據外,正在使用NHibernate(或更廣泛地說,任何類型的模型驅動的ORM工具)讓我瘋狂?

回答

7

使用像NHibernate這樣的ORM的主要優點之一就是它可以將應用程序的業務對象從數據庫中分離出來。客戶表是否包含地址信息,但您希望Customer對象包含地址類? NHibernate可以在XML中快速輕鬆地完成這項工作。

使用ORM的一個要點是,您可以自由設計系統中的對象而不用擔心數據庫問題,然後將這些對象的屬性映射到數據庫中的表示形式。所以你可以遵循一個對象驅動設計而不是數據驅動設計方法。

ORMs被設計用於遺留數據庫。他們可能有其缺點,但根據我的經驗,這是非常有利的。

+1

+1這正是我目前在做的工作。 – 2009-11-19 18:11:34

+0

傳統數據已經很好地標準化了,所以抽象這種信息並不是主要關心的問題。我更關心的是試圖擴展ORM以覆蓋多個數據源。最後,在* my *數據庫中創建一堆關注遺留數據的視圖似乎是完成它的最簡單方法。 – ProKiner 2009-11-20 14:41:05

2

默認情況下,NHibernate會話配置爲連接到單個數據庫。可以將您的數據訪問層設置爲使用不同的NHibernate會話連接到不同的數據庫。但是,如果您希望它自動將兩個數據庫之間的數據網格化爲單個對象,那麼您可能會感到失望。好的是NHibernate可以很好地處理數據庫視圖,所以如果你需要做一些複雜的事情,你總是可以編寫一個可以通過數據庫觸發器更新的視圖。就數據庫設計而言,NHibernate具有各種各樣的結構以允許傳統數據庫正常工作,如多列主鍵和其他「壞設計」怪異特性。

我會推薦它。

+0

是的,視圖通常可以很好地工作,因爲大部分遺留數據都是隻讀的。 – ProKiner 2009-11-19 18:58:32

0

這隻取決於你對NHibernate的適應程度。

+0

雖然舒適度肯定會影響決策,但它也會損害某人遠離更好的方法。只要有正確的動機,我可以對任何事情都感到滿意,但我希望選擇基於更長期的事情。 – ProKiner 2009-11-19 18:57:35

1

IT依賴, 我在這裏也有一些問題,但仍然沒有得到很好的答案。 你應該關心的事情:

a。使用NH與分層的應用程序可能會殺死NH會話的特殊功能 - 例如延遲加載。 WCF無法通過「半初始化」

b。如果沒有良好的通知基礎設施,會話緩存可能無用,而客戶端不可用。

c。你需要學習HQL ....

有時ORM比自己做這項工作慢得多/效率低。

所以我想你需要在小規模項目上測試一下,看看它對你有什麼價值,而不僅僅是在企業項目中試用它。

從性能的角度來看,你可以得到更好的性能做你自己....

Here是我自己關於這個問題的問題...沒有很好的答案還在後頭......

0

我認爲這取決於您需要如何處理遺留數據庫。

它只是爲了閱讀嗎?我會手寫一些數據訪問代碼,而不是處理多個會話工廠。但是,也許你需要創建複雜的動態查詢,那麼它可能是值得的麻煩。