2008-12-15 159 views

回答

21

AR最大的優點是它可以爲您提供現成的存儲庫併爲您管理會話管理。 ActiveRecordBase<T>ActiveRecordMediator<T>中的任何一個都是你在NHibernate下自己組裝的禮物。避免使用XML映射是另一個好處。 AR映射屬性使用簡單,但足夠靈活,可以映射相當「傳統」的數據庫。

AR最大的缺點就是它積極鼓勵你不正確地思考NHibernate。也就是說,因爲默認會話管理是每次通話會話,所以您習慣了持久對象已斷開連接的想法,並且在發生更改時必須爲Save()。這不是NHibernate應該如何工作的 - 通常情況下,你需要每個工作單元的會話或請求或線程,並且對象在會話的生命週期中保持連接狀態,所以更改會自動保存。如果你開始使用AR,然後找出你需要切換到session-per-request來進行懶加載工作 - 這在文檔中沒有很好的解釋 - 當你不期待的對象時,你會得到一個令人討厭的驚喜在會話刷新時進行保存。

請記住,城堡團隊將AR作爲Castle Monorail的補充產品,這是一個類似於Rails的.NET框架。它是爲了這種用途而設計的。它不適應更分層的,分離的設計。

使用它是什麼,但不要認爲它是NHibernate的捷徑。如果你想使用NH,但避免映射文件,請使用NHibernate Attributes或更好的Fluent NHibernate。

0

當我開始使用NHibernate時,我沒有了解Castle ActiveRecord,直到我編寫了我的Mapping文件並創建了我的類。那時,我看不出Castle Activerecord會給我什麼,所以我沒有使用它。

第二次使用NHibernate時,我只是簡單地使用myGeneration來製作映射文件和類,只是讓它看着我的數據庫。這節省了很多時間,並且讓我(再一次)不用擔心Castle Active Record。

實際上,你的大部分時間都花費在製作自定義查詢上,而Castle Active Record不一定能夠幫助你 - 如果你在NHibernate中使用myGeneration,你會繞過大部分無論如何你需要做的工作。

編輯:我不想看起來像myGeneration或NHibernate啦啦隊長。我只是使用這個工具,可以讓我快速輕鬆地完成我的工作。我花更少的時間編寫數據訪問代碼就越好。這並不意味着我無法做到這一點 - 但是每次編寫新應用程序時重新發明輪子都沒什麼意義。在需要的地方寫入SQL查詢和存儲過程,而沒有其他地方。如果您正在進行CRUD操作,則需要使用ORM。

編輯#2:Castle Active Record可能會給我帶來比我認識的更多 - 我不知道其他than what's on their website,但如果它確實帶來更多的表格,那麼它會幫助潛在的採用者能夠隨時在他們的網站上看到。

15

我發現ActiveRecord是一個很好的工具包,非常適合我使用它的中/小型項目。像Rails一樣,它爲你做出許多重要的決定,這會讓你專注於解決問題。

在我看來親的利弊是:

優點

  • 讓您專注於手頭的問題,因爲很多決策是爲你做。
  • 包括成熟,非常實用的基礎設施類(存儲庫,驗證等)
  • 寫入AR屬性比編寫XML或NHibernate.Mapping.Attributes更快。
  • 良好的文檔和社區支持
  • 它相當容易使用其他NHibernate功能。
  • 一個安全的開始。你有一個退出條款。如果你用AR打牆,你可以慢慢回到定製的NHibernate解決方案。
  • 非常適合領域優先開發(生成db)。
  • 你也可能想看看了ActiveRecord pattern

缺點的優點和缺點

  • 你不能假裝NHibernate的是不存在的 - 你仍然需要學習。
  • 如果您已經有一個遺留數據庫可用,可能不會如此高效。
  • 不透明持久性。
  • 內置映射是全面的,但對於某些項目,您可能需要恢復到地點的NHibernate映射。我沒有這個問題,但只是一個想法。

在一般情況下,我真的很喜歡的ActiveRecord,它一直是一個節省時間,主要是因爲我似乎高興地接受烤成庫中的決策和工具,並隨後將更多時間專注於手頭的問題。

我想嘗試一些項目,看看你的想法。

相關問題