【发布时间】:2017-02-16 00:35:31
【问题描述】:
互联网上充斥着UnitOfWork模式的信息; SO也不例外。
我还是不明白。据我了解UnitOfWork = Transaction in DB。就这样;不多也不少。
这对吗?
我的困惑是由于它在不同的ORMs 中是如何实现的。 NHibernate 使用 ISession 不仅仅是 Transaction。 Dapper 一切交给你。
我的问题只是关于设计模式,不考虑任何ORM 或技术。
如果不仅仅是Transaction,请解释一下。
编辑 1
参考@David Osborne 在回答中建议的this 链接。
工作单元跟踪您在业务期间所做的一切 可能影响数据库的事务。完成后,它会计算 结果是改变数据库需要做的所有事情 你的工作。
所以这意味着UnitOfWork 是DBTransaction 还有更多。
以下是它的额外职责:-
维护您在本次工作中更改、插入、删除的内容的状态。
根据这个状态,工作完成后修改数据库。
虽然上面引用中没有明确提到,但它也可以控制查询的批处理。
我现在的理解正确吗?
【问题讨论】:
-
我会说这取决于您的用例以及您的 UnitOfWork(又名 CreateCustomer、MakeBooking、CreateInvoice、...)应该做什么......我在一次交易中使用这种方式,但是一个工作单元也可以是多个事务。如果不止一个,那么您必须控制交易的回滚/恢复。
标签: design-patterns data-access-layer unit-of-work