我是第一次建立一个弹簧应用程序。我遇到了很多并发问题,我怀疑我管理后端的方式有问题。我在后端代码和我见过的示例之间可以看到的唯一区别是经理类。
在我的代码中,我有我的模型(由hibernate管理)和我的DAO,在模型上进行CRUD /搜索/等。在我看过的示例代码中,他们从不直接使用DAO。相反,他们使用间接调用DAO的管理器类。对我来说,这似乎是无意义的代码重复。
这些经理课程是为什么的?我已经读过他们将我的代码包装在“交易”中,但为什么我会想要呢?
答案 0 :(得分:5)
交易用于进行“交易”更新。
示例)用户单击导致在数据库中更新13条记录的网页。一个事务将确保0或13个更新通过,一个错误将使它全部回滚。
经理们必须让事情变得更容易。他们不会神奇地使你的代码线程安全。直接使用DAO本身并不是线程安全漏洞。
但是,我建议您限制DAO中的逻辑,并在业务层中尽可能多地使用逻辑。见Best practice for DAO pattern?
如果你发布的代码的一个小例子对于多个线程不能很好地运行,我们可以建议一些想法......但是只有交易和经理都无法解决你的问题。
答案 1 :(得分:2)
许多应用程序都有非常重要的要求,业务逻辑通常涉及访问多个资源(例如几个DAO),协调这些访问以及跨这些访问控制事务(如果访问DAO1和DAO2,则需要提交或回滚这些变化是不可分割的工作单位。)
因此,通常在专用的服务组件中封装和隐藏这种复杂性,以粗粒度的方式向客户端公开业务行为。这正是你所指的管理者正在做的事情,它们构成了Service Layer。
服务层从连接客户端层的角度定义应用程序的边界[Cockburn PloP]及其可用操作集。它封装了应用程序的业务逻辑,控制事务并协调其操作实现中的响应。
答案 2 :(得分:0)
DAO不应该拥有交易,因为他们无法知道它们是否只是更大交易的一部分。
服务层是交易所属的地方。你说它们是“无意义的代码重复”是错误的。