Skip to content

[Feature] 支持多应用 stack 合并原语(composeStacks):解决多配置手工合并痛点 #717

Description

@hotlong

背景

当前 objectui(和 ObjectStack 在多个项目场景)的应用汇总配置存在严重的手工合并痛点:

  • 当引入多个应用(如 CRM、Todo、Kitchen Sink),必须分别读出其配置,再用 ...spread 手工合并多个字段:objects、apps、dashboards、reports、pages、manifest.data 等。
  • 每加一个配置项都需要代码层反复 spread 合并,每个地方都重复一遍,容易遗漏且难维护。
  • 如果多个对象同名(如 CRM 和 Kitchen Sink 都有 account),不得不额外实现 object 去重/优先级策略,或硬合成一个大 AppPlugin。

根因分析

  1. defineStack 只支持单一 stack,不支持声明式组合多个 stack,没有 composeStacks/mergeStacks 原语。
  2. Runtime 的 Schema Registry 不支持多 owner 的同名 object,导致无法直接 plugin 多个 stack,只能先合并。
  3. 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 三种同名对象处理

���状代码痛点举例

  1. 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 合并
  1. objectstack.config.ts
apps: [
  ...(crm.apps || []),
  ...(todo.apps || []),
  ...(kitchenSink.apps || []),
],
objects: baseObjects,
// pages, dashboards, reports, manifest.data 等 spread 合并
  1. 组合多个 plugin 时因同名 object 只能选单一AppPlugin,错失插件隔离能力

建议

  • 在 @objectstack/spec 层尽早增加 compose/merge 支持,不再依赖手工 spread
  • 支持 runtime 多 AppPlugin 注册,解决 schema registry owner 冲突问题
  • 自动 views → objects bridge,提升协议层一致性

如能推进此 feature,将极大简化多应用架构内容、提升维护效率,减少手工合并和错配风险。

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions