数据库事务边界应放在用例层
很多数据不一致问题,不是数据库不可靠,而是事务边界放错了。repository 只知道一张表,service 才知道一次业务动作涉及哪些写入。
例如创建订单要写订单表、扣库存、记录余额流水。如果每个 repository 自己提交,第二步失败时第一步已经无法自然回滚。
用例层持有事务,可以把这些写操作放在同一个提交点。repository 接受 tx 执行 SQL,但不负责开启或提交。
外部调用不要放事务里。支付、短信、HTTP 通知这些动作不可回滚,应该通过状态机或消息表和数据库提交解耦。
事务边界的判断标准不是代码在哪层方便,而是谁能定义完整的一致性要求。
版权申明
本文系作者 @blogger 原创发布在数据库事务边界应放在用例层。未经许可,禁止转载。
评论
-- 评论已关闭 --
全部评论