1.设计背景
由于文件存储基于流存储,目前处于快速开发阶段, 修改对象数据结构很频繁。对象数据结构的修改,会破坏文件的二进制内存结构,版本发布时导致一些已创建的项目文件不能正常打开。目前的解决方案是,先将文件导出为XPE文件,然后再通过XPE文件导入君方智能设计平台。这个方案有两个不足:
- 通过XPE导入会丢失一些数据,导致模型不完整,还需要在导入模型的基础上在进行修复。
- 如果模型较多,会耗费大量的时间。如果模型文件能够在打开时,自动进行升级,能解决上述问题。文件数据升级功能CAD软件基础功能。
本设计只解决数据升级的问题,文件的行为升级问题及提供升级过程进度反馈机制不在本设计范围内。会在后面的时间内单独设计解决。
2.设计需求
数据升级的情况很多,能够提供一种数据升级框架,能够灵活扩展支持各种升级场景。目前已知的场景有:
- 类新增数据成员-普通数据、容器数据、指针数据
- 类删除数据-普通数据、容器数据和指针数据
- 类的数据成员的改名
- 类的数据成员从基类移到子类
- 类的数据成员从子类移到父类。
比较常用的是场景1、场景2,前期只会支持这两种情况,后期再实现后面几种。
3.设计方案
总体设计:基于OM来实现,通过类型成员的类成员的OM属性来生成新的内存节点,然后使用OM来实现新的内存节点数据的填充。具体步骤如下;
步骤1-收集属性变更记录:
(1)设计属性变更类体系来记录各种属性变更场景,基类和之类。
(2)设计类变更来来记录类的变更记录。
(3)设计OmUpdateManager来管理各种变更情况。
步骤2-根据属性变更记录生成新的内存节点
(1)根据属性变更记录,设计OmMemoryModelUpgrader来升级对象的内存节点.
步骤3:使用老的内存节点填充新的内存节点。
(1) 最后对升级过的内存节点来实现自定义的属性升级。
4.设计实现
4.1类属性变更类层次
4.2 普通MemoryNode内存节点更新类
5.技术风险及依赖
依赖OM框架。如果想了解OM框架相关知识,请参考君方智能设计平台-对象持久化技术方案-CSDN博客