设计用于资金流动的显式状态机器 笔记

设计用于资金流动的显式状态机器

支付系统通常从简单的状态列开始,如 pending(待处理)、successful(成功)和 failed(失败)。随着产品演进,更细致的状态逐渐涌现,使得状态字段变得不可靠。显式的状态机能够明确并强制规范支付生命周期,确保状态准确反映业务进展。有效的状态应体现系统所知的信息以及合法的后续操作,且状态转换必须是有意为之。例如,pending 表示无承诺,processing 表示正在履行中,completed 表示义务已满足。failed、cancelled 和 expired 代表未成功的结果或操作窗口已结束,而 disputed 则暂停常规规则以进行调查。转换规则应位于领域层,由端点请求状态变更,而非直接赋值状态。像 completed 或 cancelled 这样的终态,必须受到强保护,防止因延迟事件而被重新打开。副作用(如更新账簿或通知客户)应由转换过程协调,以保持一致性。过期应由后端作为状态转换进行管理,而非依赖 UI 定时器。后台工作线程在使交易过期前必须重新检查状态,以避免与延迟成功的竞态条件。关联交易需要单一权威来管理其生命周期,防止重复操作。保留超越通用更新时间之外的有意义的时间戳,对于运营洞察和争议解决至关重要。最终,交易状态应代表业务真相,仅通过具名的转换进行变更,这些转换需强制执行前置条件并协调副作用。