database - 包装在数据库事务中的业务逻辑
问题描述
在我的应用程序中,我有一个定义路由的 api 层、执行业务逻辑的服务层和一个查询数据库的存储库层。服务将调用存储库层来检索数据,执行各种业务逻辑,然后将响应返回给 api 层。
现在,我有一些需要在数据库事务中完成的业务逻辑。例如,假设我的应用程序允许您购买给定活动的门票:
服务层调用存储库以通过减少可用票证的数量在数据库中自动保留票证。
然后服务层发出一个 api 请求来处理票的支付。
如果支付成功,服务层调用存储库为用户和给定事件创建一个“订单”。
但是,如果付款失败,我想回滚对门票可用性所做的更改。(或者如果由于某种原因为用户创建订单失败,同样的事情)。
问题是,如果服务层知道数据库事务,这似乎是一个泄漏的抽象。有更好的范例吗?
解决方案
You don't want to hold a database transaction open the whole time you are making an API request anyway... You probably want to insert a 'pending' order, then once you get the payment change the status to 'confirmed'. This lets you store details about the error and report on failed payments too
推荐阅读
- php - $this->__construct() 在父类中调用子类的构造?
- asp.net - 如何使用 Sql 数据适配器在 ASP.NET MVC 中进行分页
- c++ - 错误表达式必须有指向对象类型的指针
- vue.js - 无法在'Storage'上执行'setItem':设置'136114546'的值超出了配额Vue
- list - 在 Prolog 列表中的每个元素之后插入元素
- macos - Mac系统上的“zsh:找不到命令:mvn” intellij ver 2020.2社区
- python - JSON 解码器错误 - 需要 ',' 分隔符:第 1 行第 22 列(字符 21)
- spring-boot - 使用 Spring BOOT 创建访问网页的角色要求
- java - 如何制作总和为 n(n-1)/2 的数字列表
- visual-studio-code - VSCode对vim的ci的快捷命令是什么
VSCode 有办法在标签之间进行选择吗?而且我的意思不仅仅是折叠和取消折叠,我的意思是选择开始标签和结束标签之间的所有内容。