假設寫入nhibernate映射文件不是一個大問題....或污染你的屬性域對象也不是一個大問題要麼...使用Castle Active Record vs Straight NHibernate有什麼優點和缺點?
有什麼優點和缺點?
是否有任何根本的技術問題?什麼會影響人們的選擇?
不太清楚所有的折衷是什麼。
假設寫入nhibernate映射文件不是一個大問題....或污染你的屬性域對象也不是一個大問題要麼...使用Castle Active Record vs Straight NHibernate有什麼優點和缺點?
有什麼優點和缺點?
是否有任何根本的技術問題?什麼會影響人們的選擇?
不太清楚所有的折衷是什麼。
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。
當我開始使用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,但如果它確實帶來更多的表格,那麼它會幫助潛在的採用者能夠隨時在他們的網站上看到。
我發現ActiveRecord是一個很好的工具包,非常適合我使用它的中/小型項目。像Rails一樣,它爲你做出許多重要的決定,這會讓你專注於解決問題。
在我看來親的利弊是:
優點
缺點的優點和缺點
在一般情況下,我真的很喜歡的ActiveRecord,它一直是一個節省時間,主要是因爲我似乎高興地接受烤成庫中的決策和工具,並隨後將更多時間專注於手頭的問題。
我想嘗試一些項目,看看你的想法。