销售订单已经保存,价格却在后续处理时被错误改写。排查这类问题时,我通常不会只盯着改写价格的那一行代码,还会追问几个更具体的问题。谁有权修改订单,修改是否经过业务规则校验,并发修改会不会相互覆盖,升级后这段扩展能否继续正常运行,问题发生后有没有记录可以还原经过。每补上一层可靠的控制,业务对象面对错误操作的能力就强一些。这种逐步加固的感觉,很接近《仙剑奇侠传 1》里的八仙石。八仙石的效果需要认准。游戏物品资料将它记为使用后使角色的防御最大值增加 2。它作用于角色的长期属性,并非只在眼前一场战斗中临时提高防御。金刚符增加防御七回合,两者不能混为一谈。八仙石也不等于女娲石,后者在同一份物品资料中对应防御最大值增加 3。ABAP 里没有一种叫作八仙石的标准对象,也没有通用指令能够给程序的防御属性永久加 2。恰当的类比是,我们针对一个确定的薄弱点,做一次能够长期保留、经得起验证的小幅加固。这里的防御力并非单一数值,而是业务数据抵御越权访问、错误输入、重复请求、并发冲突和升级影响的综合能力。游戏里一颗石头改变角色属性,企业系统里的一项改进通常要同时落在代码、配置、权限和测试上。拿销售订单的折扣修改来说,我们的要求可能是,销售人员只能修改所属销售组织的订单,折扣超过规定范围必须被拒绝,同一订单被两个人同时编辑时不能悄悄覆盖其中一人的结果。只在页面上把折扣字段设为只读,能够减少误操作,却挡不住其他入口提交修改。只增加一条权限检查,能够限制操作人,却挡不住有权限的人录入不合理的折扣。只写一段校验,仍可能漏掉并发冲突。这些控制各管一段,我们需要辨认每一段究竟防住什么。权限检查是最容易被认作八仙石的一块。经典 ABAP 开发中,可以围绕授权对象检查当前用户是否具有相应活动和业务范围的权限。下面的代码仅演示调用方式,
销售订单已经保存,价格却在后续处理时被错误改写。排查这类问题时,我通常不会只盯着改写价格的那一行代码,还会追问几个更具体的问题。谁有权修改订单,修改是否经过业务规则校验,并发修改会不会相互覆盖,升级后这段扩展能否继续正常运行,问题发生后有没有记录可以还原经过。每补上一层可靠的控制,业务对象面对错误操作的能力就强一些。这种逐步加固的感觉,很接近《仙剑奇侠传 1》里的八仙石。八仙石的效果需要认准。游戏物品资料将它记为使用后使角色的防御最大值增加 2。它作用于角色的长期属性,并非只在眼前一场战斗中临时提高防御。金刚符增加防御七回合,两者不能混为一谈。八仙石也不等于女娲石,后者在同一份物品资料中对应防御最大值增加 3。ABAP 里没有一种叫作八仙石的标准对象,也没有通用指令能够给程序的防御属性永久加 2。恰当的类比是,我们针对一个确定的薄弱点,做一次能够长期保留、经得起验证的小幅加固。这里的防御力并非单一数值,而是业务数据抵御越权访问、错误输入、重复请求、并发冲突和升级影响的综合能力。游戏里一颗石头改变角色属性,企业系统里的一项改进通常要同时落在代码、配置、权限和测试上。拿销售订单的折扣修改来说,我们的要求可能是,销售人员只能修改所属销售组织的订单,折扣超过规定范围必须被拒绝,同一订单被两个人同时编辑时不能悄悄覆盖其中一人的结果。只在页面上把折扣字段设为只读,能够减少误操作,却挡不住其他入口提交修改。只增加一条权限检查,能够限制操作人,却挡不住有权限的人录入不合理的折扣。只写一段校验,仍可能漏掉并发冲突。这些控制各管一段,我们需要辨认每一段究竟防住什么。权限检查是最容易被认作八仙石的一块。经典 ABAP 开发中,可以围绕授权对象检查当前用户是否具有相应活动和业务范围的权限。下面的代码仅演示调用方式,