在 SAP 官方的 RAP100 旅行应用练习里,一张旅行单保存之前,后台会检查客户是否存在、出发日期是否合法、结束日期是否早于开始日期。即使请求没有经过 Fiori 页面,而是通过 EML 访问业务对象,这些后台校验仍然承担着保护数据一致性的责任。这种围绕业务对象建立防线的方式,很容易让我们想到仙女座瞬的星云锁链。锁链的吸引力不只是能够伸出去攻击,而是能围绕主人建立保护范围,感知变化,并根据情况采取不同动作。把这个形象放进企业软件,我们关注的就成了几个具体问题。请求有没有权限,数据是否符合规则,同一张单据是否正在被其他会话修改,状态改变后是否需要触发后续处理。ABAP 里面没有名为「星云锁链」的标准技术。与它相近的,也不是某一个神奇的关键字,而是一组可以协同工作的机制。权限控制负责划定边界,业务校验负责识别不合法的数据,锁与版本检查负责约束并发修改,规则链负责组织判断逻辑,事件负责传播已经发生的业务变化。这里的动漫类比只帮助我们理解技术职责,不代表这些机制真的拥有自主意识,也不代表它们能够自动发现所有风险。程序只能检查已经表达出来的规则,只能保护实际经过这些规则的访问路径。把这一点理解清楚,星云锁链就能成为一个相当好用的架构思考工具。锁链围成防御范围的感觉,最接近业务对象周围的权限边界。不过,企业系统的权限必须分清两件事,一个人能够看到哪些数据,与一个人能够执行哪些操作,并不是同一个问题。采购员能够查看采购申请,不代表能够批准采购申请。总部人员能够读取海外公司的业务数据,也不代表能够修改海外公司的付款信息。只在查询阶段过滤数据,无法完整承担修改操作的授权责任。在传统 ABAP 开发中,AUTHORITY-CHECK
