核心问题
业务规则为什么不能散在 UI 和 SQL 里?
工程困境
课程访问判断在前端隐藏按钮、API 查 SQL、worker 又复制一遍。结果某次退款后,前端隐藏了入口,但 mobile API 仍允许播放。
思想模型
业务规则应该有可信位置。
canAccessCourse(accountId, courseId)
refundOrder(orderId)
canAssignCourse(accountId, organizationId, courseId)
UI 可以展示结果,SQL 可以存数据,但领域层应该表达规则。
Atlas Action
找一个 SQL 里写死的业务判断,把它翻译成一个领域函数名。
小结
业务规则散在哪里,事故就会从哪里长出来。