我想我陷入了分析的癱瘓。請幫忙!在MVVM中使用工作單元設計模式/ NHibernate會話WPF
我目前有
- 用途的NHibernate上的SQLite項目
- 器具庫和工作模式的單位:http://www.nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx
- MVVM策略在一個WPF應用程序工作
單位在我的情況下,實現一次支持一個NHibernate會話。我當時認爲這很有道理,它隱藏了ViewModel中NHibernate會話的內部運作。
現在,根據奧倫埃尼(Ayende):http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
他說服該NHibernate的會話應該創建/與演示/視圖模型相關聯的視圖被設置時設置的目標對象。他提出了爲什麼你不希望每個Windows應用程序有一個會話的問題,也不希望每個事務都創建/處理一個會話。這不幸的是帶來了一個問題,因爲我的用戶界面很容易在應用中出現10多個視圖/視圖模型。他正在展示使用MVP策略,但他的建議是否轉化爲MVVM?
這是否意味着我應該廢除工作單元並讓viewmodel直接創建NHibernate會話? WPF應用程序一次只能有一個工作會話嗎?如果這是真的,我應該什麼時候創建/處理NHibernate會話?
我還沒有考慮過NHibernate無狀態會話如何適應所有這些!我的大腦會爆炸。請幫忙!
更新:
我發現了犀牛工具工作落實Ayende的單位。我發現他的實施和我所做的實施之間存在顯着差異。他絕對支持多場會議。進一步研究後,我認爲這是最好的,我做到以下幾點:
- 廢我實施工作
- 單位辭職,使用NHibernate的ISession的和IStatelessSession直接從視圖模型對象。雖然在我看來這並不理想,但我已經花費了太多的時間在工作單元上,並沒有形成它的目標。在某個時刻應用KISS和YAGNI。至少我能夠安慰Ayende的文章和其他一些人指出,直接使用這些文件是可以的。
- 如果我真的不想公開ISession,我總是可以使用Castle.ActiveRecord,但我認爲這不是必需的。
- 我可以重新使用會話工廠代碼,因此工作單元實施不是完全浪費。
- 重構我的存儲庫以允許注入StatelessSession和Session,如果可用則使用無狀態:否則使用常規會話。
畢竟這一點,那麼我能將每視圖模型和視圖被設置時打開一個會話/無狀態會話的策略,具有視圖模型沖洗/處置會話/無狀態會話。
聽起來像一個計劃?
第一個鏈接死了 – afaolek 2015-11-11 11:20:59