概念
本节解释动态模型(Dynamic Model)背后的主要理念:涉及的实体类型、模型的定义和版本化方式、如何在运行时应用变更、数据存储位置以及支持的数据库。
静态实体与动态实体
动态模型区分两种实体:
-
静态实体 是应用程序中的常规实体。被编译为 Java 类,在类路径中使用。
-
动态实体 在运行时定义,由框架生成。不存在于应用程序源代码中。
静态实体和动态实体都可以添加动态属性。也就是说,既可以用新属性丰富已有的应用程序实体,也可以独立地引入仅在运行时存在的全新实体。
模型定义
动态模型是枚举、实体、属性和视图的声明性描述。可以在管理 UI 中以图形方式编辑:创建实体、添加带有类型和约束的属性、定义枚举,以及声明视图和菜单项。
在后台,动态模型被序列化为 YAML。在使用图形化编辑器工作时,不直接编辑 YAML,但 YAML 形式便于审查、导出和导入。有关文件中元素、支持的值和默认值的完整列表,请参见 YAML 参考。
版本化与部署
模型定义作为一组版本化配置存储在数据库中。一次只有一个版本处于激活状态。保留旧版本的目的在于,可以随时间审查变更,并在需要时可以通过激活较早版本来回滚。
应用程序启动时,框架可以自动使用激活的版本,从而运行中的应用程序能反映最新部署的模型。此行为由 jmix.dynmodel.deploy-on-app-start 属性控制。
应用变更
当模型变更时,框架会从新的模型定义生成 模型元数据 并进行原子化发布。在发布完成之前,运行中的应用程序会继续使用前一个发布的内容,因此,发布失败不会造成仅更新部分模型的问题。
破坏性清理(例如删除不再属于模型的列或表)会延迟执行,直到不再有任何工作使用前一个发布时为止。这可以在模型变更时保持正在运行的工作的一致性。
已打开的视图不会自动切换,需要重新加载后才会获取变更。
本页是否有帮助?
感谢您的反馈