2009-11-11 83 views
3

對於我們正在尋找NHibernate的新項目。我們總體喜歡它,但有一點讓我們感到困擾:它似乎非常耗費資源。顯然NHibernate會加載一個對象的所有屬性,即使你只需要其中一個屬性。此外,它還會爲子對象的屬性執行相同的操作。NHibernate有什麼好處和壞處?

所以我們衡量NHibernate的利弊。你會說他們是什麼,如果上漲彌補了缺點?

+0

由於延遲加載,NHibernate不會加載整個對象圖。據說,NHibernate是我發生過的最好的事情之一(編碼方式)。它驅使我遠離將數據視爲啞巴結構,而是驅使我編寫「真正的」OO設計。 – 2009-11-12 14:40:09

+0

謝謝你的肯尼。然而,有些人告訴我,Hibernate確實支持延遲加載屬性,但不支持NHibernate,.NET版本。我相信誰? :) – Astaar 2009-11-17 16:11:16

+0

這是爲什麼關閉?我覺得它非常具有建設性,答案也很好。 – 2011-10-14 15:06:41

回答

2

缺點:

  1. 它可能需要一段時間才能得到的編輯HBM文件掛起(雖然你可以使用城堡的ActiveRecord的,這確實會話管理,並讓你聲明與屬性,關係其用於生成HBM,因爲NH位於AR之下。注意:您不必在Castle的AR中使用AR模式)。
  2. 它可能會運行更多的查詢來檢索數據的特定圖形,如果您手動編寫數據圖表會比使用
  3. 更有困難利用數據庫引擎的功能,因爲NH對待就像一個啞巴唱片店
  4. Oracle的支持不如其他方言。

優勢

  1. 您可以使用LINQ到NH,並且使用LINQ樣式的查詢對所有支持的方言。
  2. 您可以使用HQL來代替SQL
  3. 您可以切換DB的商販在配置文件幾行
  4. 有一些工具來生成您的模式爲您服務。
  5. 支持實例
2

優點:

  1. 二級緩存
  2. 創建對象本身代表
  3. 創建SQL查詢和避免SQL注入
  4. 延遲加載
  5. 以下外鍵將更方便您的數據。
  6. DB翻譯(改方言)
  7. 該框架是很好的支持,是開源
  8. 有很多與工作的工具和生成的代碼/映射文件的Hibernate

缺點:

  1. 可能比直接查詢要慢
  2. 對象初始化比用手慢
  3. 初始配置是一種痛苦
  4. 映射在運行時檢查,並且可以是一個痛苦設置

這取決於你在做什麼。 Hibernate不是批量更新的工具。

2

這裏的版本是尚未提到的一些東西(對不起,這不是在Pro/CON格式)。這些適用於您將創建通用框架來執行基本實體操作(因此您有可用於其他項目的可重用NHibernate庫)的情況。

  • 設置它是一個真正的痛苦。我們現在穩定,但我們開始開發年前前。
  • 考慮您將開發的應用程序的類型(即Web窗體或WinForms),因爲您在通用框架中使用的會話模型可能不同;或者,您可能希望開發一個您希望能夠插入自己的會話管理實現的框架。這裏有很多選擇。
  • 如果有機會使用框架開發高度併發的應用程序,請從一開始就設計併發模型 - 以後可能很難正確地使用併發模型。
  • 如果使用NHibernate.Mapping.Attributes庫,則不必處理外部XML映射文件。你所要做的就是將元數據添加到你的數據對象類中。這真是方便,直觀,易於維護。

這就是我現在所擁有的。如果我想到其他任何東西,我會添加到我的列表中。