知识卡片
区分结果、异常和错误:网关处理预期结果,错误事件处理异常
内容
“乐观路线”(Happy Path)是流程默认的、积极结果的路径,其中不含异常、错误或偏差,但现实生活中充满异常,如何在流程模型里表达”偏离乐观路线”是一个反复引发讨论的领域。BPMN提供错误事件,让流程模型能对任务中的错误做出反应——比如评分服务抛出”用户数据无效”的错误;但同一种业务场景也可以不用错误事件,而是把有问题的结果写入流程上下文,在流程后半段用一个排他网关来分流(就像对待”没有评分的用户”一样)。两种表达方式的关键区别不在技术实现难易,而在语义:如果评分服务”没能给出分数”本身是一个业务上完全可以预期、合理产生的结果(用户仍然拿到一个有效结果,只是分数缺失),就不该当作错误处理,而应该视为一个预期结果——这条界限很细,但值得认真思考,因为它直接影响模型是否容易被理解。经验法则是:网关用来处理任务的预期结果,错误事件用来处理阻碍达成预期结果的真正异常。现实中还必须单独处理纯技术问题——比如评分服务暂时不可用,这类情况通常不该直接在每个服务任务上都画出重试逻辑,那样会让可视化模型变得臃肿、让业务人员困惑;正确做法是通过技术属性配置重试规则,或者交给运维过程处理,这些细节默认隐藏在图形之外,如果确实重要到需要让所有人都看见,可以加一段文本注释来补充说明,而不是把重试逻辑画进流程结构本身。
参考来源
- 位置:《流程自动化实战:系统架构和软件开发视角》第10章《业务-IT协作》"10.5.2 区分结果、异常和错误"(源文件:_epub-src/EPUB/xhtml/Section0001_0014.xhtml)
- 结论依据:原文用评分服务"用户数据无效"的例子对比错误事件与排他网关两种表达方式的语义差异,明确给出"网关处理预期结果、错误事件处理异常"的经验法则,并说明技术性重试不该画进流程结构、应配置属性或加文本注释的处理方式,直接支撑本卡片结论。
- 原始内容:根据经验,网关用以处理任务的预期结果,错误事件用来处理异常(即阻碍达到预期结果)……你可能不想对重试进行建模,因为你必须在每个服务任务中添加它。这样会使可视化模型变得臃肿不堪。