Skip to content

merge 配置未彻底解决、配置 double-pass hack 和对象命名冲突问题待修复 #1023

@hotlong

Description

@hotlong

问题描述

近期虽然已将 mergeViewsIntoObjectsmergeActionsIntoObjects 相关逻辑从手动 merge 移动到了 @object-ui/corecomposeStacks(),但实际 main/config 代码流和 objects/views/actions 的 runtime 映射,依然停留在 double-pass hack,以及对象名冲突未彻底解决。


1. defineStack() 验证后又二次 composeStacks(),double-pass hack

  • objectstack.config.tsapps/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 映射适配;

建议修复清单

  1. 明确只调用一次 composeStacks 汇总所有数据,避免 double-pass(如 objects/views/actions apps),不再手动二次 merge;
  2. 完全用 composeStacks 输出 apps(去掉手动展开),apps 部分保持和 objects 一致的数据流;
  3. Kitchen Sink example 对象重命名,按照插件隔离原则区分 source,消除 silent override;
  4. 明确 ObjectUI 和 Spec 层 composeStacks 的职责、避免重复实现;
  5. 评估 ObjectSchema/ViewSchema 支持 runtime 字段的方式,减少 hack;
  6. Tests & Docs:针对合并/冲突场景补充分支测试,ROADMAP.md、架构文档同步更新。

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions