核心问题

业务规则为什么不能散在 UI 和 SQL 里?

工程困境

课程访问判断在前端隐藏按钮、API 查 SQL、worker 又复制一遍。结果某次退款后,前端隐藏了入口,但 mobile API 仍允许播放。

思想模型

业务规则应该有可信位置。

canAccessCourse(accountId, courseId)
refundOrder(orderId)
canAssignCourse(accountId, organizationId, courseId)

UI 可以展示结果,SQL 可以存数据,但领域层应该表达规则。

Atlas Action

找一个 SQL 里写死的业务判断,把它翻译成一个领域函数名。

小结

业务规则散在哪里,事故就会从哪里长出来。