在MVVM WPF中使用工作单元设计模式/ NHibernate会话

Ech*_*ban 12 nhibernate wpf session mvvm unit-of-work

我想我陷入了分析的瘫痪状态.请帮忙!

我目前有一个项目

在我的案例中,工作单元实现一次支持一个NHibernate会话.我当时认为这是有道理的; 它隐藏了ViewModel中NHibernate会话的内部工作方式.

现在,根据Oren Eini(Ayende)的说法:http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

他说服观众在处理与presenter/viewmodel相关联的视图时应创建/处理NHibernate会话.他提出了为什么每个Windows应用程序不需要一个会话,也不希望每个事务创建/处理会话的问题.遗憾的是,这会产生一个问题,因为我的UI可以轻松地在应用程序中显示10个以上的视图/视图模型.他正在使用MVP策略,但他的建议是否转化为MVVM?

这是否意味着我应该废弃工作单元并让viewmodel直接创建NHibernate会话?WPF应用程序一次只能有一个工作会话吗?如果这是真的,我什么时候应该创建/处置NHibernate会话?

而且我还没有考虑过NHibernate无状态会话如何适应这一切!我的大脑会爆炸.请帮忙!

更新:

我在Rhino Tools中找到了Ayende的工作单元实现.我发现他的实施与我所做的实施之间存在显着差异.他绝对支持多次会议.经过进一步的研究,我认为我最好做以下事情:

  • 废弃我对工作单元的实施
  • 辞职直接从viewmodel使用NHibernate的ISession和IStatelessSession对象.虽然在我看来这并不理想,但我已经花了太多时间在工作单元上,而且它并没有形成它的本质.必须在某个时候申请KISS和YAGNI.我至少可以对Ayende的文章和其他一些人指出直接使用它们的事实感到安慰.
  • 如果我真的不想公开ISession,我总是可以使用Castle.ActiveRecord,但我认为没有必要.
  • 我可以重新使用会话工厂代码,因此工作单元实现并不是完全浪费.
  • 重构我的存储库以允许注入StatelessSession和Session,并使用无状态(如果可用):否则使用常规会话.

毕竟,我可以应用每个viewmodel打开一个会话/无状态会话的策略,并且当处理视图时,具有viewmodel flush/dispose会话/无状态会话.

听起来像是个计划?

Ken*_*art 2

对于 10 多个活动会话,您真正关心的是什么?会话是可用于重量级操作的轻量级对象。如果会话当前没有执行任何操作,则意义不大。