业务规则与决策表是什么
业务规则是「在什么条件下做什么决定」的约束,例如折扣计算、审批门槛、风控拦截阈值。规则散落在多个服务的条件分支里时,同一策略的修改要改多处,且边界情况由各实现者自行解读。决策表把条件组合与对应动作逐格列出来,条件之间用任意值、区间与优先级表达,业务与研发可以按行逐条核对,也能直接转成测试用例。
基本信息
| 表达形式 | 决策表(条件列 + 动作列)、决策树、规则脚本 |
|---|---|
| 关键约定 | 条件优先级、冲突处理、空值与缺失字段的判定 |
| 评审方式 | 业务与研发逐行确认,每行都能生成一条测试用例 |
| 落地位置 | 集中于规则模块或规则引擎,避免散落在各服务的条件分支 |
| 变更要求 | 规则版本化并留变更记录,生效时间点可追溯 |
典型使用场景
- 定价与折扣:按客户等级、订单金额、活动窗口组合定价
- 审批流:按金额与风险等级决定审批层级与是否需要复核
- 风控拦截:命中规则组合时拦截、放行或转人工核查
- 补贴与积分:多条件叠加发放,需明确条件叠加与互斥关系
- 合规校验:不同地区的资质要求差异写成可核对的条件表
- 规则迁移:把历史系统里的条件分支整理成表,作为重构依据
决策表示例(折扣规则)
| 客户等级 | 订单金额 | 是否大促 | 动作 |
|---|---|---|---|
| VIP | 任意 | 任意 | 折扣 9 折 |
| 普通 | 满 1000 | 是 | 折扣 95 折 |
| 普通 | 满 1000 | 否 | 无折扣 |
| 普通 | 不足 1000 | 任意 | 无折扣 |
| 任一(异常) | 金额缺失 | 任意 | 拒绝并提示补齐信息 |
规则落地示意
规则落地示意
# 决策表逐行转成可测试的判断,顺序即优先级
# 行 1
if level == 'VIP': return rate(0.90)
# 行 2
if level == 'NORMAL' and amount >= 1000 and promo: return rate(0.95)
# 行 5 前置:金额缺失视为数据异常,必须显式处理而非落默认分支
if amount is None: raise InvalidOrder('missing amount')
# 默认分支:不匹配任何规则时的行为要写明并记录日志
return rate(1.00)决策表必须显式规定条件组合的优先级与冲突处理,否则实现者各自解读边界情况,同一订单在不同入口可能得到不同折扣。
规则引擎适合条件组合多、变更频繁且需要业务可读的场景;规则数量少且稳定时,直接的判断逻辑更易调试与测试,不要为规则引擎而规则引擎。