Skip to content

硬删除客户端非原子 batch 模拟回退(待后端经 discovery 声明支持 /batch)——承接 #2679 验收第 4 条 #2693

Description

@os-zhuang

背景

#2679 已把 master-detail 保存统一走 dataSource.batchTransaction,并把非原子回退隔离进 @object-ui/coreemulateBatchTransaction(适配器仅在 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」能力位,客户端才能声明式确认后端支持,而非"打了才知道"。

待前提满足后的方案

  1. 适配器在 connect() 时读 discovery 能力位:声明支持则永不降级(比现在的 404 探测更早、更明确);
  2. 移除 ObjectStackAdapter 的客户端补偿降级分支,直接依赖服务端原子性;
  3. runBatchTransaction 的"无 batchTransaction 则模拟"分支保留给第三方非 ObjectStack 适配器(ValueDataSource/MockDataSource 等本就无服务端事务的适配器)。

验收

  • 适配器基于 discovery 能力位决策,不再对已声明支持的后端做 404 探测降级;
  • ObjectStackAdapter 移除非原子补偿分支;
  • core 的通用 emulateBatchTransaction 仅保留给无服务端事务的适配器;
  • 明确并文档化 ObjectUI 声明的最低支持后端版本。

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions