OneCode 低代码引擎核心元数据设计揭秘(低代码架构)
前言:
在百度百科中,元数据被定义为:描述数据的数据,对数据及信息资源的描述性信息。在低代码平台中元数据的使用也是非常广泛,从前端可视化的组件的prop 属性定义,后端OR Maping数据库表映射,以及支撑系统模块关联关系,权限分配支撑等等都是基础性的元数据。而对于低代码平台及工具而言,其最主要的一个功能也是配置管理低代码组件的元数据信息。在业务组件发生需求变更时尽量通过修改元素配置的方式来改变组件的业务特性。
一,OneCode元数据实现
OneCode 语言本身基于成熟的JAVA语言体系,在元数据管理方面采用了,JAVA5原生的Annoation代码注解配置来完成,通过JDK完成基础编译,具体的元数据含义则由OneCode代码引擎独立独立解析支持。
(1)OneCode元数据注解基础组成
OneCode 元数据注解体系基础基础体系是一组基于经典MVC结构的注解分类。
在模型(Module)类中中添加 @DBTable实现数据库表映射,或者在实体类中增加Aggregation聚合注解实现实体向聚合类的转换。
在控制器中(Controller)中添加Web路由注解@RequestMapping来完成Controller向web 容器的注入实现。
视图(View)中增加可被可视化设计器识别的视图注解代码。
(2)OneCode高级注解
OneCode 在完成基础的MVC注解支持外,额外提供了基于模块以及工程体系的注解应用。模块注解中提供了大量的值对象描述及常用域功能集成支持,可以在MVC基础上,通过增加@Module 、@TreeView 、@GridVIew、@FormView等集成性注解标识将单一的数据交互过程标识为模块级的应用。实现一键生成应用从而实现对于业务模块的高聚合支持。
在低代码应用中由于其场景的特殊性,对模块的发布以及工程管理应用提出了特殊的需求。OneCode在此基础上也提供了基于@Domain(领域服务) @Project (工程服务),允许开发者将第三方的引擎服务、常用业务服务以及工程本地代码导出发布预览等等提供元数据的支持。
二,OneCode元数据注解解耦关系关系设计
(1)OneCode元数据注解添加范围
OneCode 支持开发者,在Java类、方法、字段属性以及构造函数上添加相应的注解。在类直接上直接添加@RequestMapping 直接声明可以将一组方法声明为Web可访问,也可以添加@GridAnnotaion @FormAnnataion等注解将当前实体声明为列表或者视图渲染。同样服务的方法注解上,可以添加与方法对应的动作、事件、服务来实现对应领域事件及服务调度的注册。而对于树形对象、容器组件等应用组件需要动态装载或者符合构建的实体则通过在构造函数上添加对象声明周期管理的相关注解。
MVC通用注解一览图
(2)OneCode 元数据注解接口添加原则
OneCode允许用户在接口、抽象类、内部类以及普通类中添加注解,但更推荐用户将OneCode注解添加到独立的接口类,在多数的注解应用中,独立的接口描述基本上就已经能完成元数据的描述需求。程序在运行期可以通过,Spring 等IOC框架实现具体实现的以来注入。而当开发者通过OneCode建模工具来修改元数据定义时也可以有效的避免对具体实现的干扰。
一键渲染
(3)OneCode 元数据注解分类理论支持及分类方法
OneCode在通用MVC开发注解基础上,大幅的引入了领域驱动设计的模型原理。通过领域模型元数据注解支持 ,将通用MVC开发,引擎中间件、微服务调度服务、业务集成开发、以及工程全权限配置等领域范畴的服务进行领域对象声明,在工程初始化时统一引入到通用的领域模型中,供OneCode的领域模型工具完成进一步的建模配置
三,OneCode元数据建模工具支持
(1)OneCode元数据编辑工具
OneCode 元素编辑工具是OneCode领域建模中最为重要的一个工具,OneCode代码工具可以直接读取附有OneCode元数据注解的Java原文件,开发者可以直接手工编辑Java代码。
也可以通过展开元数据属性图进行可视化的元数据编辑管理。
(2)仓储构建工具
OneCode提供了强大的注解支持体系,但开发者在首次使用时往往还是会出现手足无措,仓储构建工具的目的是辅助开发者使用常用的实体模型,通过资源适配快速的完成基础工程的构建,然后再通过OneCode 编辑器完成进一步的元数据注解支持。 OneCode 内置了数据库驱动工具,允许用户直接数据库表结构,也可以通过自带的API桥接工具完成接口与实体的自动映射投影快速完成OneCode 工程构建。
(3)视图设计工具
OneCode视图设计器,通常是OneCode建模的最后的一步,在完成前期数据建模及工程构建后,通过向视图设计器的无缝对接,实现了全栈应用的无代码应用。