很多数据不一致问题,不是数据库不可靠,而是事务边界放错了。repository 只知道一张表,service 才知道一次业务动作涉及哪些写入。

例如创建订单要写订单表、扣库存、记录余额流水。如果每个 repository 自己提交,第二步失败时第一步已经无法自然回滚。

用例层持有事务,可以把这些写操作放在同一个提交点。repository 接受 tx 执行 SQL,但不负责开启或提交。

外部调用不要放事务里。支付、短信、HTTP 通知这些动作不可回滚,应该通过状态机或消息表和数据库提交解耦。

事务边界的判断标准不是代码在哪层方便,而是谁能定义完整的一致性要求。

分类: 数据库与缓存 标签: 工程实践 事务 数据库

评论

-- 评论已关闭 --

全部评论