背景
#2679 已把 master-detail 保存统一走 dataSource.batchTransaction,并把非原子回退隔离进 @object-ui/core 的 emulateBatchTransaction(适配器仅在 POST /api/v1/batch 返回 404/405/501 时降级)。见已合并 PR #2684。
#2679 验收第 4 条明确:任何"硬删除"客户端编排都卡在「最低后端版本经 discovery 声明支持 /batch」这个前提上。
现状(可接受的债,但非终态)
ObjectStackAdapter.batchTransaction(packages/data-objectstack/src/index.ts)在端点缺失/不支持事务时,靠运行时探测(404/405/501)降级到 emulateBatchTransaction(非原子、best-effort 逆序补偿)。
emulateBatchTransaction + runBatchTransaction 常驻 @object-ui/core。
- 结果:只要还兼容"可能没有
/batch 的旧后端",就得同时维护「真原子」与「客户端模拟」两套语义(即使模拟已隔离到单点、有测试)。
前提(阻塞)
blocked-by objectstack-ai/objectstack#3298 —— 服务端需先在 discovery 广播「原子 batch」能力位,客户端才能声明式确认后端支持,而非"打了才知道"。
待前提满足后的方案
- 适配器在
connect() 时读 discovery 能力位:声明支持则永不降级(比现在的 404 探测更早、更明确);
- 移除
ObjectStackAdapter 的客户端补偿降级分支,直接依赖服务端原子性;
runBatchTransaction 的"无 batchTransaction 则模拟"分支保留给第三方非 ObjectStack 适配器(ValueDataSource/MockDataSource 等本就无服务端事务的适配器)。
验收
关联
背景
#2679 已把 master-detail 保存统一走
dataSource.batchTransaction,并把非原子回退隔离进@object-ui/core的emulateBatchTransaction(适配器仅在POST /api/v1/batch返回 404/405/501 时降级)。见已合并 PR #2684。#2679 验收第 4 条明确:任何"硬删除"客户端编排都卡在「最低后端版本经 discovery 声明支持
/batch」这个前提上。现状(可接受的债,但非终态)
ObjectStackAdapter.batchTransaction(packages/data-objectstack/src/index.ts)在端点缺失/不支持事务时,靠运行时探测(404/405/501)降级到emulateBatchTransaction(非原子、best-effort 逆序补偿)。emulateBatchTransaction+runBatchTransaction常驻@object-ui/core。/batch的旧后端",就得同时维护「真原子」与「客户端模拟」两套语义(即使模拟已隔离到单点、有测试)。前提(阻塞)
blocked-by objectstack-ai/objectstack#3298 —— 服务端需先在 discovery 广播「原子 batch」能力位,客户端才能声明式确认后端支持,而非"打了才知道"。
待前提满足后的方案
connect()时读 discovery 能力位:声明支持则永不降级(比现在的 404 探测更早、更明确);ObjectStackAdapter的客户端补偿降级分支,直接依赖服务端原子性;runBatchTransaction的"无batchTransaction则模拟"分支保留给第三方非 ObjectStack 适配器(ValueDataSource/MockDataSource等本就无服务端事务的适配器)。验收
ObjectStackAdapter移除非原子补偿分支;emulateBatchTransaction仅保留给无服务端事务的适配器;关联