Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns UnitOfWork等于事务吗?还是说不止这些?_Design Patterns_Data Access Layer_Unit Of Work - Fatal编程技术网

Design patterns UnitOfWork等于事务吗?还是说不止这些?

Design patterns UnitOfWork等于事务吗?还是说不止这些?,design-patterns,data-access-layer,unit-of-work,Design Patterns,Data Access Layer,Unit Of Work,互联网上充斥着关于工作单元模式的信息;即便如此,也不例外 我还是不明白。据我理解,UnitOfWork=数据库中的事务。仅此而已;不多不少 这是正确的吗 我的困惑是由于它是如何在不同的ORMs中实现的NHibernate使用ISession不仅仅用于事务简洁将一切留给你 我这里的问题只是关于设计模式,没有考虑任何ORM或技术 如果不仅仅是交易,请解释如何操作 编辑1 参考@David Osborne在回答中建议的链接 工作单元跟踪您在业务期间所做的一切 可能影响数据库的事务。当你完成后,它就会出

互联网上充斥着关于工作单元模式的信息;即便如此,也不例外

我还是不明白。据我理解,
UnitOfWork=数据库中的事务
。仅此而已;不多不少

这是正确的吗

我的困惑是由于它是如何在不同的
ORM
s中实现的
NHibernate
使用
ISession
不仅仅用于
事务
<代码>简洁将一切留给你

我这里的问题只是关于设计模式,没有考虑任何
ORM
或技术

如果不仅仅是
交易
,请解释如何操作

编辑1

参考@David Osborne在回答中建议的链接

工作单元跟踪您在业务期间所做的一切 可能影响数据库的事务。当你完成后,它就会出现 因此,我们将列出更改数据库所需的所有操作 谢谢你的工作

因此,这意味着
UnitOfWork
DBTransaction
以及更多

以下是it部门的额外职责:-

  • 维护您在此工作会话中更改、插入和删除的内容的状态

  • 基于此状态,在完成工作时修改数据库

虽然上面的引号中没有明确提到,但它也可以控制查询的批处理

我现在的理解正确了吗?

这是因为在逻辑/业务事务期间需要ORM工具来跟踪对象的[持久性]状态

一个工作单元如何管理它,以及它与底层存储技术和存储对象的关系,是一个实现细节


中间有许多SQL语句的数据库事务也可以说是一个工作单元。然而,我认为关键的区别在于,模式中定义的工作单元已将该细节级别抽象为对象级别。

A
UnitOfWork
是一个业务事务。不一定是技术事务(db事务),但通常与技术事务相关

在本规范中,其定义为:

维护受业务事务影响的对象列表,并协调更改的写出和并发问题的解决

它不定义如何写入更改,也不定义存储类型

应用程序可能会将更改写入

  • 使用SQL的数据库
  • 使用流的文件系统
  • 使用http请求的持久性服务
  • 使用方法调用的分布式缓存甚至内存存储
UnitOfWork
(业务事务)收集对业务对象的更改,并确保其他业务事务只会看到有效的业务对象

例如,当应用程序执行用例时,它会修改业务对象。如果两个业务事务(通常是用例)并行执行,那么应用程序必须注意每个业务事务执行的更改以及其他业务事务看到它们的时间

从技术上讲,这通常是使用db事务完成的。因此,工作单元通常是db事务


使用ORM框架处理持久性的应用程序通常在字的单位和db事务之间有一对一的关系。因此,工作单元和db事务之间的差异通常与开发人员无关。

我认为这取决于您的用例以及您的工作单元(又名CreateCustomer、MakeBooking、CreateInvoice等)应该做什么。。。。我用这种方式处理一个事务,但一个工作单元也可以是多个事务。如果有多个事务,则必须控制事务的回滚/恢复。它可以。同样,这取决于执行情况,并由执行情况自行决定。我知道NHibernate会在条件合适时批处理操作。@DavidOsborne我很确定它甚至可以追溯到ORM还不是什么东西的时候:)有趣的一点,@guillaume31。我的经验只能追溯到福勒的模式。