背景与目标
当前框架(ObjectStack)中,字段分组逻辑存在于 Field.schema 的 group 字段与 Studio 设计器 UI 偏好配置之间。分组本身(组名、顺序、icon、label、描述等)未作为对象元数据结构的独立一等属性持久化,导致:
- 分组顺序/显示细节在各环境之间不一致,缺少版本化管控
- 无法原子迁移、回滚或工具化处理
- 扩展包难以通过 protocol-safe 方式向现有对象扩展新的分组/维护顺序
同时,fieldOrder 字段(用于组内字段排列顺序提示)有可能因新增字段、扩展包���增/删字段、用户在界面添加字段等各种原因变得不完整、过时,需有健壮的“自愈”机制和明确的协议规则避免污染与冲突。
需求汇总
1. 在 ObjectSchema 中引入 fieldGroups 作为一等属性
- 对象级有序
fieldGroups: FieldGroup[],包含 key/label/desc/icon/expanded/visibleOn/fieldOrder
- 每组顺序 = 数组顺序(无需显式 order 字段)
- 每组内支持扩展
fieldOrder 提示字段顺序(但允许缺失、不完整、过期)
- 组 -> 字段 通过 Field.group key 关联,反向兼容
- group 支持显示属性、排序、可见性表达式等(参考上文 ObjectFieldGroupSchema 示例)
2. 完善 fieldOrder 归一化逻辑
- fieldOrder 视为非权威“hint”,缺失/过期成员不报错
- 新增字段未纳入时按“append/prepend/alphabetical”等策略自动归位,可 per-group 控制
- 扩展包通过 field.group 舒服扩展分组与组内顺序,无需直接改 fieldOrder(可另加 groupPlacement 设置 before/after/priority)
- 提供 normalizeFieldGroups(object) 公用归一化方法供 UI/渲染/导出/比对等场景幂等调用
3. 明确编码规则和可扩展性
- fieldGroupsPolicy 等编解码策略作为协议实现常量或 runtime plugin config,不写进 ObjectSchema
- Object 层只保留业务流相关的分组定义(fieldGroups),系统规则归 runtime 里集中配置
4. ChangeSet & 迁移感知
- 新增、重命名、排序分组应有对应 migration 操作类型(add_field_group/reorder_field_groups/modify_field_group/remove_field_group/reorder_group_fields 等)
- 设计器所有对象字段分组操作、拖拽、归属变更都能“可回滚、可 diff”
5. 兼容与跨包拓展
- 旧对象无 fieldGroups 时聚合 field.group 自动生成一组
- 扩展包仅需为新字段声明字段 group,即可安全扩展分组体系
实现清单建议
- 新建
data/field-group.zod.ts Schema
- 在
ObjectSchema 增加 fieldGroups 属性与��验逻辑
- 增加 normalizeFieldGroups(object) helper,供渲染/导出/比对等用
- system/migration.zod.ts 新增 atomic ops(add/reorder/modify/remove group and order)
- object-designer.zod.ts 标注 FieldGroupSchema @deprecated,迁移至 ObjectFieldGroupSchema
- 补全自动测试
- 更新 CHANGELOG 和相关文档
详细技术论证与 protocol 案例见本 Issue 历史讨论。
背景与目标
当前框架(ObjectStack)中,字段分组逻辑存在于 Field.schema 的 group 字段与 Studio 设计器 UI 偏好配置之间。分组本身(组名、顺序、icon、label、描述等)未作为对象元数据结构的独立一等属性持久化,导致:
同时,fieldOrder 字段(用于组内字段排列顺序提示)有可能因新增字段、扩展包���增/删字段、用户在界面添加字段等各种原因变得不完整、过时,需有健壮的“自愈”机制和明确的协议规则避免污染与冲突。
需求汇总
1. 在 ObjectSchema 中引入 fieldGroups 作为一等属性
fieldGroups: FieldGroup[],包含 key/label/desc/icon/expanded/visibleOn/fieldOrderfieldOrder提示字段顺序(但允许缺失、不完整、过期)2. 完善 fieldOrder 归一化逻辑
3. 明确编码规则和可扩展性
4. ChangeSet & 迁移感知
5. 兼容与跨包拓展
实现清单建议
data/field-group.zod.tsSchemaObjectSchema增加 fieldGroups 属性与��验逻辑详细技术论证与 protocol 案例见本 Issue 历史讨论。