问题描述
近期虽然已将 mergeViewsIntoObjects 和 mergeActionsIntoObjects 相关逻辑从手动 merge 移动到了 @object-ui/core 的 composeStacks(),但实际 main/config 代码流和 objects/views/actions 的 runtime 映射,依然停留在 double-pass hack,以及对象名冲突未彻底解决。
1. defineStack() 验证后又二次 composeStacks(),double-pass hack
objectstack.config.ts 和 apps/console/objectstack.shared.ts 都有相似的模式:先 compose+validate,再重新 merge views/actions 到 objects;
defineStack() 的 Zod parse 会剥掉非标准字段(如 listViews),导致必须二次 merge,显式 hack;
- 当前已经是 "merge hidden, not removed"(只是换了个位置藏起来);
- 建议提炼为唯一的数据流入口工具,或从 schema 协议源头支持动态字段;
2. apps 配置仍然有手动结构展开
- 比如 console 侧 apps 是
[...crmApps, ...(todoConfig.apps || []), ...(kitchenSinkConfig.apps || [])],而不是完全走 composed.apps;
- 应简化入口逻辑,只用 composed/apps 统一流;
3. Kitchen Sink 对象未改名,objectConflict 仍然只是静默压制冲突
4. composeStacks 工具重复,协议和工具并存
- ObjectUI 有独立实现 (@object-ui/core),spec/core 层也有相同工具,功能高度重叠;
- 建议统一为 spec 层提供的 composeStacks,ObjectUI 侧只保留 runtime 映射适配;
建议修复清单
- 明确只调用一次 composeStacks 汇总所有数据,避免 double-pass(如 objects/views/actions apps),不再手动二次 merge;
- 完全用 composeStacks 输出 apps(去掉手动展开),apps 部分保持和 objects 一致的数据流;
- Kitchen Sink example 对象重命名,按照插件隔离原则区分 source,消除 silent override;
- 明确 ObjectUI 和 Spec 层 composeStacks 的职责、避免重复实现;
- 评估 ObjectSchema/ViewSchema 支持 runtime 字段的方式,减少 hack;
- Tests & Docs:针对合并/冲突场景补充分支测试,ROADMAP.md、架构文档同步更新。
问题描述
近期虽然已将
mergeViewsIntoObjects和mergeActionsIntoObjects相关逻辑从手动 merge 移动到了@object-ui/core的composeStacks(),但实际 main/config 代码流和 objects/views/actions 的 runtime 映射,依然停留在 double-pass hack,以及对象名冲突未彻底解决。1.
defineStack()验证后又二次composeStacks(),double-pass hackobjectstack.config.ts和apps/console/objectstack.shared.ts都有相似的模式:先 compose+validate,再重新 merge views/actions 到 objects;defineStack()的 Zod parse 会剥掉非标准字段(如 listViews),导致必须二次 merge,显式 hack;2. apps 配置仍然有手动结构展开
[...crmApps, ...(todoConfig.apps || []), ...(kitchenSinkConfig.apps || [])],而不是完全走 composed.apps;3. Kitchen Sink 对象未改名,objectConflict 仍然只是静默压制冲突
accountobject,spec/merge 静默覆盖一方,数据丢失;account对象改名或移除,彻底消除多 source 的命名冲突;4. composeStacks 工具重复,协议和工具并存
建议修复清单