2009-09-24 59 views
2

我正在將我的CSharp類映射到數據庫表的階段。與其他工具比較後,我決定使用NHibernate作爲我的ORM工具。我從來沒有用NHibernate做過一個真正的項目,現在我正在考慮映射的替代方案,ActiveRecord:根據項目的網站,使用ActiveRecord可以顯着提高生產力。但是,我不喜歡爲我的CSharp類添加屬性的想法。畢竟,我的課不應該有任何關於數據庫關係的知識。通過使用ActiveRecord將綁定我很好地分離的類到ActiveRecord,並給我很難,如果我想在未來切換下劃線DAO層實現。NHibernate或FluentNHibernate或ActiveRecord?

FluentNHibernate:FluentNhibernate是我開始映射時的第一次嘗試。但我也有這個方法的一些問題。 1)我不喜歡我的映射策略編譯爲二進制文件。我希望能夠通過修改xml文件來更改映射。 2)FluentNHibernate的成熟。 NHibernate已經存在了很長時間,並且擁有大量的用戶,所以我對它的成熟度非常滿意。相比之下,FluentNhibernate相對年輕,並沒有被很多用戶測試過。儘管我可以潛入源代碼來解決所出現的問題,但我不熟悉觸摸低級別實現的技能。 3)FluentNHibernate的文檔可用性遠遠超過NHibernate。當我撞上堅硬的牆壁時,我希望有一個地方可以走。

NHibernate:目前,我正在使用裸Nhibernate XML來做映射。說實話,使用XML讓我頭痛不已。從字面上講,我必須避免僅僅拋棄.hbm.xml文件,並且每天多次獲取ActiveRecord或FluentNHibernate。因此,這裏是我的困境:我應該用我的心去做:「完成這件該死的事情吧!」;或者,我是否應該遵循「良好實踐指南」來承受現在的痛苦,並在稍後獲得相對容易的時間?

有何評論?

回答

4

請注意,任何與ORM相關的類都不應被視爲「業務對象」類或暴露給您的UI。他們應該被視爲你的數據層的一部分。這種模式對於ActiveRecord來說並不是獨一無二的。一般而言,您希望業務層儘可能少地瞭解其下有ORM的事實,並且您不希望自己的UI知道您的數據層。你也想考慮DTOs

流利的NHibernate解決了弱類型XML可能容易出錯的問題。

儘管採用ActiveRecord之類的東西可能會有缺點,但它似乎是適合您的情況的解決方案。

使用.hbm.xml文件的最佳理由是,如果要從代碼生成數據庫中的代碼(使用類似CodeSmith的東西)。手工編寫.hbm.xml文件很少是最好的選擇。

+0

謝謝你的回答。現在我將使用ActiveRecord。 – 2009-09-24 07:06:10