使用拦截器来管理交易是一种好习惯吗? 我有一个强点,虽然它相当于在动作本身中开始和提交。 为什么我要使用拦截器管理的事务呢?
答案 0 :(得分:3)
实践并不错,例如Spring框架使用@Transactional
注释的“自动开始”和“自动提交”事务的方面。
Why should I use interceptor managed transactions at all?
它减少了许多样板代码:打开连接,开始事务,提交事务和关闭连接。
但是如果你想用拦截器编写自己的事务管理器 - 小心并发问题
根据您发布的图片:
最好不要从服务层公开事务管理。如果您的表示层对事务管理一无所知,那就更好了。因此,请尝试将事务管理代码封装在服务层或DAO层中。如果您的表示层管理事务而服务层不是,则意味着您的服务不是自包含的,只有在客户端提供某些事务管理逻辑时,它们才能被其他客户端重用。
来自评论:
最好是将事务管理代码放到服务层,因为 服务层通常执行一些业务级别的操作 必须在一次交易中执行。所以你的服务方法可以 使用2个或更多DAO在一个事务中执行所有数据库操作。 对不起,没有链接 - 我根据自己的经验告诉你。