知识卡片

长期运行能力捍卫边界:烫手山芋反模式与API污染

普通读书笔记卡

内容

[[荒野大集成Ash的故事揭示的常见反模式]]中提到的支付服务与脆弱信用卡服务通信的例子在这里给出了新解释:如果支付服务本身不存储任何状态,一旦调用信用卡服务出问题,它唯一能做的就是把问题原样甩回给上游调用方(这里是订单履约服务)——这就是”烫手山芋”反模式,面对问题只想着尽快脱手。这个反模式真正的代价不是”多转发了一次错误”,而是让支付服务的内部概念(比如”信用卡不可用”这种支付服务实现细节)泄漏进了对外API,最终一路嵌入到调用方的客户端代码里,两个服务因此被迫产生了额外的耦合。如果支付服务本身支持长期运行(比如通过工作流引擎实现状态持久化、能等待用户重新输入正确的支付信息),它就能对外提供一个极简的API——只告诉调用方”支付通过”或”支付失败”,把处理信用卡失败、等待用户补充信息等内部细节完全封装在自己边界内,不需要客户端插手。这类需求有时还直接来自业务本身,例如信用卡过期或被锁定导致扣费失败时,业务方希望能主动通知客户、要求提供新的支付信息,尤其是自动续订这种客户无需在线操作、系统需要自主处理支付信息更新的场景——这同样要求支付服务具备长期运行的能力。缺少长期运行能力,服务就很难满足这类需求,只能让内部概念混入API、增加服务间耦合;引入工作流引擎正是降低这种风险、帮你切实捍卫服务边界的一种简单实现方式。

参考来源

- 位置:《流程自动化实战:系统架构和软件开发视角》第7章《自治、边界和隔离》"7.3.3 长期运行的行为模式有助于你捍卫边界"(源文件:_epub-src/EPUB/xhtml/Section0001_0011.xhtml) - 结论依据:原文明确"烫手山芋"反模式的定义(无状态服务只能把问题甩回调用方)及其导致内部概念混入API/客户端的后果,并对比支持长期运行的支付服务如何用简单API封装内部细节,同时说明自动续订这类业务需求同样依赖长期运行能力,直接支撑本卡片结论。 - 原始内容:这就是我所说的"烫手的山芋"反模式——面对问题你只想着尽快解决。糟糕的是,这导致支付服务的内部概念混到了API中,并最终嵌入客户端……如果你的支付服务支持长期运行,你就可以提供一个简单的API,只告知支付通过或失败。