[关闭]
@windwolf 2020-05-19T06:16:41.000000Z 字数 2306 阅读 376

如何保持产品元数据在项目中的兼容性

Sailing


总体思路

主要有两种思路:

  1. 基于Json节点变更记录的方法. 以产品的元数据作为基线, 项目中记录对元数据的变更. 这种方法的问题时, 当基线变更时, 如何判断对应的变更记录是否还适用? 这些变更记录是否还符合语义?

  2. 基于元数据语义schema的变更控制. 对元数据中每个元素分别定义其在项目的变更行为. 对于固定schema的元数据, 此方法理论上可行; 对无固定schema(主要是无限嵌套层次结构)的元数据, 此方法不可行, 一个变动的办法是此类元数据分拆或者重整, 忽略含有层次结构的部分.

相比之下, 方案1形式上更加general, 但不确定是否满足语义; 方案2更加special, 但粗看比较可行, 但局部还是要用到方案1中的方法来管理变更.

Json节点变更记录

先分析一下json节点变更记录的形式

操作类型\操作对象 基本字段 对象 集合
修改内容 记录变更前, 变更后的值 只能分辨空和有值的区别 只能分辨空和有值的区别

基于元数据语义schema的变更控制

首要的问题的问题是重整无固定schema元数据. 目前存在无固定schema的元数据有:
- entity 层次结构的实体字段
- ui 层级结构的布局
- initializer 层次结构的scope, 和目标实体类型一致
- validator

实际需求

单据

场景

调整策略

UI

场景

调整策略

验证器

场景

调整策略

实体

场景

调整策略

单据类型

场景

- 基本信息修改

项目修改变更记录在基线变动情况下的兼容性

形式案例

字段在项目中改了, 产品中也改了

字段A, 产品原始值A1, 项目改成了A2, 产品中升级成A3.
如果这个字段原本设成不允许修改, 那么不存在这种情况, 即便存在, 也变成A3, 且清除修改记录?
原本设为可以修改, 现在也是可以修改, 那么升级后保持A2;
原本设为可以修改, 现在设为不允许修改, 那么变为A3.

字段在项目中改了, 产品中废弃, 甚至取消了

原产品字段a, 产品原始值A1, 项目中改成了A2, 产品schema中作废.
这种情况一般伴随着功能优化升级, 会搭配元数据迁移.
最后的效果项目体现出来, a字段作废, 原A字段修改内容调整成对AZ字段的修改.

新产品新加字段

原产品中没有, 新产品新加了D.
最后的效果就是项目中也增加了D.

子对象中字段类似上述三例操作

也同上三例

子对象中的字段在项目中改了, 产品中整个子对象删除了.

是否可修改的配置情况如下:

子对象\字段 可修改 不可修改
可修改 保持项目修改 某字段值情况, 子对象的其他值保持不变?
不可修改

这种情况往往涉及字段变更, 起码涉及UI调整. 一般来说, 调整后的结构包含了原功能, 但配置的地方有调整, 此时需要配合元数据迁移; 如果配置的地方改到runtime了, 需要提供调整指南(避免这样做).

总之, 产品中字段schema取消了, 那么

产品中整个子对象为空, 项目中增加了, 新产品中也增加了, 子对象节点设置了

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注