背景
当前 objectui(和 ObjectStack 在多个项目场景)的应用汇总配置存在严重的手工合并痛点:
- 当引入多个应用(如 CRM、Todo、Kitchen Sink),必须分别读出其配置,再用
...spread 手工合并多个字段:objects、apps、dashboards、reports、pages、manifest.data 等。
- 每加一个配置项都需要代码层反复 spread 合并,每个地方都重复一遍,容易遗漏且难维护。
- 如果多个对象同名(如 CRM 和 Kitchen Sink 都有 account),不得不额外实现 object 去重/优先级策略,或硬合成一个大 AppPlugin。
根因分析
defineStack 只支持单一 stack,不支持声明式组合多个 stack,没有 composeStacks/mergeStacks 原语。
- Runtime 的 Schema Registry 不支持多 owner 的同名 object,导致无法直接 plugin 多个 stack,只能先合并。
- views 配置在 stack 顶层,而 runtime 协议期望 views 挂在 object 下,需要自己写 bridge 代码做合并。
希望的能力
1. 声明式 stack 组合
- 引入一个原生的
composeStacks(...stacks, options) 或类似 API,支持将多个 defineStack 的输出合并为一个大 stack。
options 支持 object 派生策略、manifest 合并、字段 override、同名 object merge/优先级等。
2. 多 AppPlugin/Plugin 机制
- 允许 runtime 多 AppPlugin 共存,即便出现同名 object(通过 namespace/owner/优先级等机制)
- 支持 plugin 隔离,不同 App 的 metadata/seed 数据不会冲突
3. 自动 bridge views → objects
- spec 层自动将 views[].listViews 合并到 objects 的 listViews 字段,无需手工 bridge
4. 合并策略内置
- 内置 object 去重/优先级策略,支持 seed 数据优先、plugin metadata优先等
- 可选 deep-merge/override/error 三种同名对象处理
���状代码痛点举例
- apps/console/objectstack.shared.ts
objects: mergeViewsIntoObjects(
mergeObjects([
...(crmConfig.objects || []),
...(todoConfig.objects || []),
...(kitchenSinkConfig.objects || []),
], hotcrmObjects),
allConfigs,
),
apps: [
...crmApps,
...(todoConfig.apps || []),
...(kitchenSinkConfig.apps || []),
...hotcrmApps,
],
// dashboards, reports, pages, manifest.data等全部 spread 合并
- objectstack.config.ts
apps: [
...(crm.apps || []),
...(todo.apps || []),
...(kitchenSink.apps || []),
],
objects: baseObjects,
// pages, dashboards, reports, manifest.data 等 spread 合并
- 组合多个 plugin 时因同名 object 只能选单一AppPlugin,错失插件隔离能力
建议
- 在 @objectstack/spec 层尽早增加 compose/merge 支持,不再依赖手工 spread
- 支持 runtime 多 AppPlugin 注册,解决 schema registry owner 冲突问题
- 自动 views → objects bridge,提升协议层一致性
如能推进此 feature,将极大简化多应用架构内容、提升维护效率,减少手工合并和错配风险。
背景
当前 objectui(和 ObjectStack 在多个项目场景)的应用汇总配置存在严重的手工合并痛点:
...spread手工合并多个字段:objects、apps、dashboards、reports、pages、manifest.data 等。根因分析
defineStack只支持单一 stack,不支持声明式组合多个 stack,没有composeStacks/mergeStacks原语。希望的能力
1. 声明式 stack 组合
composeStacks(...stacks, options)或类似 API,支持将多个 defineStack 的输出合并为一个大 stack。options支持 object 派生策略、manifest 合并、字段 override、同名 object merge/优先级等。2. 多 AppPlugin/Plugin 机制
3. 自动 bridge views → objects
4. 合并策略内置
���状代码痛点举例
建议
如能推进此 feature,将极大简化多应用架构内容、提升维护效率,减少手工合并和错配风险。