经理/交易的目的是啥?

Posted

技术标签:

【中文标题】经理/交易的目的是啥?【英文标题】:What is the purpose of Managers / Transactions?经理/交易的目的是什么? 【发布时间】:2011-03-01 22:51:15 【问题描述】:

我是第一次构建 Spring 应用程序。我遇到了很多并发问题,我怀疑我管理后端的方式有问题。我看到的后端代码和我见过的示例之间的唯一区别是管理器类。

在我的代码中,我有我的模型(由 hibernate 管理)和我的 DAO 以在模型上执行 CRUD/搜索/等。在我看过的示例代码中,他们从不直接使用 DAO。相反,他们使用间接调用 DAO 的管理器类。对我来说,这似乎是毫无意义的代码重复。

这些经理类有什么用?我读过他们将我的代码包装在“事务”中,但我为什么要这样做?

【问题讨论】:

您能否发布一个示例或指向使用这些管理器的示例的链接? 【参考方案1】:

事务用于使更新“事务性”。

示例)用户单击一个网页,导致数据库中更新了 13 条记录。事务将确保 0 或 13 次更新通过,错误将使其全部回滚。

经理必须让事情变得更容易做。它们不会神奇地使您的代码线程安全。直接使用 DAO 本身并不是线程安全错误。

但是,我建议您限制 DAO 中的逻辑,并将尽可能多的逻辑放在业务层中。见Best practice for DAO pattern?

如果您发布的代码可能不能很好地与多线程一起使用的小示例,我们可以提出一些建议……但单独的事务和管理器都无法解决您的问题。

【讨论】:

长时间运行的事务通常看起来是“并发”问题,因为其他线程会命中打开事务的(数据库)锁。 非常正确。需要更多细节来看看这是否是他所说的问题【参考方案2】:

许多应用程序有非平凡的需求,业务逻辑通常涉及对多个资源(例如多个 DAO)的访问、这些访问的协调以及跨这些访问的事务控制(如果您访问 DAO1 和 DAO2,您想要提交或回滚变化作为一个不可分割的工作单元)。

因此,通常将这种复杂性封装并隐藏在专用的服务组件中,以粗粒度的方式向客户端公开业务行为。

这正是您所指的经理们正在做的事情,他们构成了Service Layer。

服务层从连接客户端层的角度定义了应用程序的边界 [Cockburn PloP] 及其可用操作集。它封装了应用程序的业务逻辑,控制事务并在其操作的实现中协调响应。

【讨论】:

【参考方案3】:

DAO 不应拥有交易,因为他们无法知道自己是否只是更大交易的一部分。

服务层是事务所属的地方。你说它们是“毫无意义的代码重复”是不正确的。

【讨论】:

以上是关于经理/交易的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

创建一个对 3 天销售交易求和并计算 3 天销售交易的函数的最佳方法是啥?

德国DAX指数是啥 怎么交易德指期货 交易时间

买钢乐:浙商银行领导一行来访买钢乐电子交易中心

为银行交易生成 OrderId 的最佳方法是啥?

同花顺中的函数CLOSE,在交易时间是啥值啊。是最新股价吗?还是前一个交易日的收盘价?

即使交易通过,Metamask 也不会显示确认提示的原因可能是啥?