Unit of Work模式是一种保持上下文的方式,可以跟踪您域中的所有动作,并在可能(可能)执行复杂的逻辑时立即应用所有动作。

当与ORM(例如NHibernate)一起使用时,将共享ISession(或Linq 2 Sql中的DataContext)用于对基础数据库的每个操作来实现工作单元,这是一种好习惯。

实现权利可能很棘手,尤其是在处理服务器应用程序(主要是ASP.Net MVC或ASP.Net Webforms)时。

我涉足Rhino.Commons(面向NHibernate)中的实现,并且我认识其他几个,但没有很好地了解它们的优点和缺点。

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

最佳答案

更新:响应后,我看到了这个(unit-of-work-pattern-in-net)。


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

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

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

我不了解nHibernate或ISession构造。但是,如果您在传统意义上使用术语“工作单元”,那么我认为您想要的是一笔交易。

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

10-08 08:40