【问题标题】:What are the .net reference implementations of the Unit of Work pattern?工作单元模式的 .net 参考实现是什么?
【发布时间】:2009-06-03 16:59:58
【问题描述】:

Unit of Work 模式是一种在上下文中跟踪域上所有操作并在您(可能)完成复杂逻辑时一次性应用所有操作的方法。

当与 ORM(例如 NHibernate)一起使用时,最好使用共享 ISession(或 Linq 2 Sql 中的 DataContext)来实现工作单元,该共享 ISession(或 Linq 2 Sql 中的 DataContext)用于对底层数据库的每个操作。

正确实施可能很棘手,尤其是在处理服务器应用程序时,主要是 ASP.Net MVC 或 ASP.Net Webforms。

我已经涉足 Rhino.Commons(面向 NHibernate)中的实现,并且我知道其他几个,但没有很好地掌握它们的优缺点。

最常用的是什么,以及如何将它们无缝集成到 ASP.Net MVC(或 WebForms,但我对 MVC 最感兴趣)中?

【问题讨论】:

  • Cheeso,这个问题不是引用的两个问题的欺骗。第一个解释了什么是 UOW。我知道它是什么。第二个更相关,但谈论的是 RhinoCommons。我在询问不同的现有实现以及如何使用它们。

标签: c# nhibernate design-patterns orm unit-of-work


【解决方案1】:

更新:我在回复后看到了这个 (unit-of-work-pattern-in-net)。

也许 System.Transactions.Transaction 是您所追求的。

工作单元是多年前最初应用于基于大型机的应用程序的术语。这些应用程序将执行一系列步骤。如果任何一个步骤失败,数据库将回滚到之前的“同步点”。该应用程序将在成功完成工作单元中的所有步骤后记录一个新的同步点。这些步骤表现得像一个单元。

这个比喻已经演变,因此在 .NET 中,我们有了一个 Transaction 构造。在事务范围内对可恢复数据存储执行的工作作为一个单元执行,具有 ACID 属性。这些数据存储的示例可能是:任何现代 RDBMS、像 MSMQ 这样的排队系统,或者在 Windows 上,文件系统或注册表(通过 KTM)。当事务解决时,它要么提交要么回滚所有事务存储上的所有操作。

我不知道 nHibernate 或 ISession 构造。但是如果您使用传统意义上的“工作单元”一词,那么我认为您想要的是事务。

至于将事务集成到 ASP.NET MVC 中 - 不确定这意味着什么。 Transaction 不关心 UI 模型是什么,也不关心您如何设计 UI 流控制。如果您更新数据库(我想是“模型”),那么您可以选择将该更新包含在事务中。仅当您作为单个事务的一部分进行多次更新时才真正有意义。另一方面,您不想让交易长时间保持打开状态。对数据库的锁定将导致争用,从而导致吞吐量下降。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2019-08-24
    • 2016-01-12
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多