跳到主要内容

事务作用域不要跨服务无限扩散

· 阅读需 1 分钟
一介布衣
全栈开发者 / 技术写作者

Sequelize 开事务并不难,难的是控制事务作用域。很多项目一开始只是局部写入,后来为了复用逻辑,把 transaction 对象一层层往下传,结果一个简单发布动作能串起好几个服务函数,谁都可能在事务里顺手写点东西。

我更倾向把事务边界收在“用例层”或“服务入口层”。也就是说,事务由最外层业务流程负责开启和提交,内部子函数只接受明确的仓储操作,不继续把事务语义向外扩散。这样做能让人很清楚地知道:一次事务到底保护了哪些写入,失败时该回滚到哪里。

如果事务对象在系统里漫游太久,通常会带来两个问题:

  • 调用方越来越难判断自己是否处于事务上下文。
  • 本来可以拆开的逻辑被迫绑成同步链路。

事务的价值在于保护一致性,不是在代码里制造隐形耦合。边界越清楚,后面越好维护。