gpt4 book ai didi

wpf - 在 MVVM WPF 中使用工作单元设计模式/NHibernate session

转载 作者:行者123 更新时间:2023-12-04 01:09:50 26 4
gpt4 key购买 nike

我想我陷入了分析的瘫痪。请帮忙!

我目前有一个项目

  • 在 SQLite 上使用 NHibernate
  • 实现存储库和工作单元模式:http://www.nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx
  • WPF 应用程序中的 MVVM 策略

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

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

    他说服观众当与演示者/ View 模型关联的 View 被释放时,NHibernate session 应该被创建/释放。他提出了为什么您不希望每个 Windows 应用程序一个 session ,也不希望每个事务创建/处置一个 session 的问题。不幸的是,这带来了一个问题,因为我的 UI 很容易在一个应用程序中出现 10 多个 View / View 模型。他正在使用 MVP 策略进行演示,但他的建议是否可以转化为 MVVM?

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

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

    更新:

    我在 Rhino Tools 中找到了 Ayende 的工作单元实现。我发现他的实现和我做的有很大的不同。他绝对支持多个 session 。经过进一步研究,我认为最好执行以下操作:
  • 废弃我对工作单元的实现
  • 辞职以直接从 View 模型中使用 NHibernate 的 ISession 和 IStatelessSession 对象。虽然在我看来它并不理想,但我已经在 Unit of Work 上花费了太多时间,而且它并没有达到现在的效果。必须在某个时候应用 KISS 和 YAGNI。 Ayende 的文章和其他一些人指出直接使用这些是可以的,我至少可以感到安慰。
  • 如果我真的不想暴露 ISession,我总是可以使用 CaSTLe.ActiveRecord,但我认为这没有必要。
  • 我可以重用 session 工厂代码,所以工作单元的实现并不是完全浪费。
  • 重构我的存储库以允许注入(inject) StatelessSession 和 Session,并在可用时使用无状态:否则使用常规 session 。

  • 毕竟,我可以应用每个 View 模型打开一个 session /无状态 session 的策略,当 View 被处置时,让 View 模型刷新/处置 session /无状态 session 。

    听起来像是个计划?

    最佳答案

    我知道这可以追溯到不久前,但我已经在网上寻找了 3 天的体面答案。
    我阅读了您提到的两个博客,查看了 Nhibernate 3.0 食谱,其中他们还讨论了 MVP 应用程序中的 Nhibernate,但这并不完全适合我的 MVVM 上下文与存储库和使用 Ninject for IoC。

    我发现这个旧帖子是迄今为止最有用的页面:
    http://www.emidee.net/index.php/2010/08/23/ninject-use-one-database-session-per-view-model

    我希望这对将来偶然发现这个问题的人有所帮助。

    关于wpf - 在 MVVM WPF 中使用工作单元设计模式/NHibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604762/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com