赞
踩
GitHub地址:https://github.com/chljapan/KayaSmart
带你走进MDA模型驱动低代码开发的世界。--元模型驱动低代码平台架构。
业务建模演示视频:
审批流演示视频:
低代码开发貌似很神奇,简单的拖拽一些基本元素,就可以实现一些复杂的业务逻辑。
其实也没有那么复杂,它的本质就是模型映射。
比如说我们的客观世界,水,空气... ...
组成的根本就是原子,不同的原子区别于原子自身的特性。不同的原子结合规则,形成了客观多彩的物质世界。
那么低代码平台也就是利用这样的原理,定义不同的原子(可操作的元素,利用元素的不同属性设置来定义不同的原子),规定各个原子联系的规则。多个元素组成对象。
对象开始具有更多的宏观特性(例如原子定义铁,铝等金属原子,然后铁,铝定义汽车的各个零件,零件又组成汽车,汽车可以跑起来,可以按喇叭等等)。
如果还没有完全理解,我们 接下来会更详细,系统的来构建我们的低代码平台。
目前的建模工具很多,但是多变复杂的系统,很难用现有的工具准确的描述出我们需要的模型来,其结果就是我们需要大量的手工代码来弥补模型的不足。没办法真正应用模型驱动来有效的进行开发。
我们需要我们的模型至少具备如下信息:
UI(前端信息):组件类型,长度,验证信息,是否必须输入等等
DBMS(数据库创建,操作信息):单表,多表的增删改查等等
WorkFlow(业务流程):可以创建业务流程,决策者的权限,附件信息等等
Rules(业务规则,可以实现,但是效率不高,这部分直接用代码来实现更灵活):复杂的业务逻辑等等
上面的信息用一个工具来包含所有,对于工具提供商来说,的确是不小的挑战。
还好,我们有办法来解决上面所有的需求!!!
接下来我们要说的MOF(Meta Object Facility 元对象机制)是比UML更高层次的抽象,它的目的是为了描述UML的扩展或者其它未来可能出现的类UML的建模语言。通过扩展UML我们可以建立一套完整的模型描述语言。
下面我们用到的建模工具GME就是基于MOF开发的一套通用建模工具。
我们利用GME的MOF建模方法,开发出我们自己的元模型即:KAYA
(有兴趣的朋友可以自己去学习有关的MOF建模知识,下面的截图是利用元元模型来构建元模型的一个片段,哈哈好复杂,比蜘蛛网还要复杂,但是没办法,我们需要构建的是复杂的软件工程,下面的过程是必须的!!!)
不过,也正是我们可以自由的构建我们自己的模型工具,那么你就是这个软件世界的主宰,是这个世界规则的制定者(说的像是这个世界的上帝一样,hahaha,其实真的和这个世界的神差不多,掌握着这个世界的一切规则)。
元模型的设计思路参照如下:(我们只有做到绝对的抽象,才能构建一个通用的低代码平台,这一步决定了你的低代码平台的关键)
正所谓道生一,一生二,二生三,三生万物,出自老子的《道德经》。
我们如何去描述我们的客观世界,所谓的系统也是由基础元素构成。我们都知道OOP的指导思想来开发我们的程序。
来帮助我们设计理解复杂的软件系统。我们要构建的是一个通用的建模平台。所以我们要从构成客观世界的基础元素
来考虑我们的软件系统。我们要做到足够的抽象,太能实现真正意义的模型驱动。
原子:是组成客观世界的基础。原子也分种类,也就是原子也具有自己的属性。
不同的原子又组成不同的分子,众多的分子又组成实际的物体。不通的物体通过规则等构建了整个客观世界。
这就是KAYA的设计思想。让我们来看YAYA元模型的一些基本元素元素:
她包括:
Property(也就是构成系统的基本属性),它也有自身的一些属性来描述自身,比如说全局唯一的ID,在系统中的类型,长度,控件类型等等。你可以把它看成是客观世界中的原子。
Role(就是多个Property组成的一个集合),它可以看做有领域概念的系统元素,你可以把它看做一个产品,一个服务,一个业务概念或者一个表(实际跟表还是有区别的)等等
其他的一些概念都是我们在构建软件产品所必须的概念。它也是原子的集合。客观世界中组成的单纯物质构成。
Product(产品&服务--可以看作系统,子系统,产品等等的名称),
WorkFlow(业务流程,人参与决策的部分,当然一部分是自动完成的例如某一个状态的改变会改变流程的分支走向等等),
他们又包含很多具体的概念,稍后我们来介绍。
KAYA包含的可操作元素比较简单:我们通过简单的拖拽,形成下面的工程图。也就是我们的业务模型,我们的低代码平台的运行规则都是基于这个模型的。
我们通过KAYA唯一的配置文件(kayaconfig.properties):
#Log Path(日志保存位置)
kayaMetaModelParseLogPath=C:/workspace/KayaModel.log
kayaMetaModelSqlLogPath=C:/workspace/KayaModelSql.log
kayaMetaModelConnectionLogPath=C:/workspace/KayaModelConnection.log
#KayaModelFile path(业务模型的保存位置)
metamodelPath=C:/Users/Desktop/GME/kaya003.mga
modelPath=C:/Users/Desktop/GME/kaya003.xme
#Model parseMode dev:开发环境(支持Windows) prod:生产环境(支持Windows,MacOS,Linux,Unix)
mode=dev
然后在Eclipse或者命令行中就可以启动我们的项目
加载到KAYA引擎中后,解析模型,通过元模型接口就可以运行整个程序了。
我利用的是Spring-Boot来做的例子。
前端的核心主要由一个JS文件来动态生成所有的维护页面。
当然,你可以选你自己喜欢的前端语言来开发你的界面。因为前端都是基于KAYA提供的REST API信息来提供给前端调用,所以我们可以花很少的代码,就可以完成前端的页面开发了。
例如我用了大约1500代码,就完成了所有运维页面的开发,哪怕你有100个页面,因为他是基于元模型驱动的,你根本不需要更改前端的代码了。你可以很容易把页面处理抽成共通。
我们来看一下运行的效果。(因为EasyUI的商用版本收费,所以改为layUI,表现也更丰富!这里感谢LayUI 作者 贤心)
上面的画面都是自动生成的。基本完成所建对象的增删改查处理。整个工程包含一个JAR包和一个配置文件文件。
没有任何其他多余的东西。如果你想开发另外的系统,只需要改变模型文件就可以。你根本不需要改变前后端的代码。
当然,额外的业务代码需要我们结合提供的JAR包里的接口和方法来实现(自动实现所有的事务一致性)。
因为我们利用的是元模型驱动架构,所以和其他模型驱动或者领域驱动最大的不同就是,没有新代码生成(当然,具体的业务代码提供两种方式,一个是手动写Java代码来实现,另外就是通过业务规则模型来实现)。
这就是元模型驱动最大的魅力。你一行代码都没有写,就可以实现所有基础数据的维护页面和逻辑,页面跳转等。
总结:
KAYA引擎目前提供以下功能
1. 所有的增删改查,都已API的方式提供了。 你可以随意增减模型中的字段,都无需更改后台代码。真正的模型驱动引擎。(支持热更新模型,以及多语言变换)
2. 可以直接定位到单个字段。没有传统数据库的表合并等操作。效率远远高于传统数据库结构架构。因为每个数据都是原子操作,系统本身支持两种数据存储方式:传统的关系型数据库,和树状数据存储。
3.独立开发的流程引擎,可以独立集成,单独作为流程引擎来使用。
4. 是一个真正意义上的可执行的XML(模型)文件引擎。
5.灵活的可扩展架构,支持Unix,Linux,Windows,Mac等跨平台操作。
6.这个工具没有中间代码生成,因为利用的是元模型驱动。所以,你只要建模完成,程序就可以跑了,她的所有维护页面都是自动生成的。(注意,不是生成代码,是模型本身就已经完成了底层模型的操作)
GME是范德比尔特大学(VANDERBILT UNIVERSITY)开发的用于特定领域建模研究的开源工具。下载地址:http://www.isis.vanderbilt.edu/projects/GME (这里用的是Ver.17.12.6 )。
由32位和64位可供选择,建议选择64位版本。
http://repo.isis.vanderbilt.edu/GME/old/17.12.6/GME_x64-17.12.6.msi
可以参照上述链接下载GME工具。
元模型文件下载地址
https://download.csdn.net/download/chljapan/11387869
1.1概要-KAYA-X System的基础为建模。
引入我们的元模型后
我们打开GME:
Ctrl + N 打开Select Paradigm画面。
点击Add from file按钮
在对话框中选择KaYaModel.mat文件,点击Open按钮。然后如下图
我们将KaYaModel.mat选中,点击Create new按钮
点击Next> 输入文件名(KaYa001)后点击Save(保存)
构建我们的业务模型(领域模型)
选中Root Folder,鼠标右键单击,点击Insert Model,继续点击KaYaDiagram选项。
我们会看到下面的变化。
我们鼠标双击KaYaDiagram,工具的左侧会显示一些图标。
我们建模的所有操作都会在上面的界面中完成。
让我们来熟悉一下左侧的图标。
这个是整个系统的集合。各种表,规则,流程都会从属于这个集合。
这个图标你可以理解成数据库中的表。实际的业务中代表具有多种特性的某一角色。例如:员工这一角色,包括年龄,性别,联系方式,地址,工资等多种属性。
这个我们可以理解为角色的参照。在后续的规则引擎中,我们会进行更为详细的介绍。
这个是表中的主键属性(唯一排他)。
这个代表角色的属性。
这个是角色属性的参照。
我们来熟悉一下这个工具的布局。
我们通过操作来熟悉一下这些组件。
新建一个模型取名为Kaya001.mga
我们来添加一个系统
设置系统名称为【综合业务管理系统】(双击图标下面的Product字体位置可以直接更改该图标名称,或者直接更改红线区域信息)
这里有几个ProductService的属性,我们来熟悉一下
KindKey:关键字,用来识别该控件的唯一标识。 StartDate: 用来控制该控件的开始周期。(默认值为9999-12-31 ,代表无效,其他值视具体业务来规定,下同) EndDate:用来控制该控件的结束周期。 Comments:注释的内容可以帮助开发者理解该控件的具体业务含义代替开发文档。 |
我们用员工管理系统为例,像该系统添加员工角色。选中Role控件,然后按住鼠标左键拖拽左边的Role控件到主编辑区。放开鼠标左键。我们看到在主编辑区追加了 图标。看起来像下图的样子:
在主作业区域选中鼠标左键点击Role图标,右下角的属性编辑区域我们来编辑该控件的属性。
KindKey:关键字,用来识别该控件的唯一标识。 IndexNo:可以作为前台排列该控件的顺序信息。 StartDate: 用来控制该控件的开始周期。(默认值为9999-12-31 ,代表无效,其他值视具体业务来规定,下同) EndDate:用来控制该控件的结束周期。 Comments:注释的内容可以帮助开发者理解该控件的具体业务含义。 |
我们为该控件编辑属性信息如下:
控件名称:员工信息 KindKey:EmployeeInfo IndexNo:字段前台位置顺序等。 StartDate: 2018-12-20该控件生效 EndDate:9999-12-31 永久有效 Comments:员工信息表 |
我们来建立系统与角色之间的关系。
鼠标左键点击左侧连线区的 图标(红色区域)。然后将鼠标指针移动到员工信息控件左半部,变成下图的时候,点击鼠标左键,然后再将鼠标指针移动到综合业务管理系统控件右半部,当其同样变成红色外框时,再次点击鼠标左键。这样我们就为该角色和系统创建了彼此的关系。(连线的位置可以指定,就是亮起红色方块的位置为连线的起点终点)
我们在用鼠标左键点击连线区的 图标(红色区域),返回到编辑状态,鼠标左键双击员工信息控件。我们的模型工具会变成下面的状态。接下来我们可以为角色-员工信息来添加细节属性。
控件名称:员工信息 KindKey:EmployeeInfo IndexNo:字段前台位置顺序等。 StartDate: 2018-12-20该控件生效 EndDate:9999-12-31 永久有效 Comments:员工信息表 |
我们来建立系统与角色之间的关系。
鼠标左键点击左侧连线区的 图标(红色区域)。然后将鼠标指针移动到员工信息控件左半部,变成下图的时候,点击鼠标左键,然后再将鼠标指针移动到综合业务管理系统控件右半部,当其同样变成红色外框时,再次点击鼠标左键。这样我们就为该角色和系统创建了彼此的关系。(连线的位置可以指定,就是亮起红色方块的位置为连线的起点终点)
我们在用鼠标左键点击连线区的 图标(红色区域),返回到编辑状态,鼠标左键双击员工信息控件。我们的模型工具会变成下面的状态。接下来我们可以为角色-员工信息来添加细节属性。
Property是整个系统的原子属性,具有唯一性(统一表内,属性的Kind Key具有排他性)。让我们来看一下它具体的一些参数。同样选中左侧的控件后,左键按住,拖拽控件到主作业区域。
同样,在主作业区域,鼠标左键选中该控件。我们在右下角可以看到该控件的属性。
我们来编辑一下该控件。
我们再用相同方法追加其他属性控件。
切换到员工信息操作区的主作业区,右键选择Pase Special 里面的子选项As Reference.如下图。
参照元素属性如下:
控件名称:员工信息 KindKey:该表排他键 Display: 2018-12-20该控件生效 IsUniqueKey:是否是主键 IndexNo:字段前台位置顺序等。 补足:该元素的其他信息会自动参照元信息(开始结束时间,长度类型等。) |
完成建模后,我们需要到处模型文件。
打开菜单File,选择Export XML,选择保存位置后,点击Save按钮。保存模型文件。
在Console窗口会输入如下类似信息:
Project successfully exported into C:\Users\chljapan\Desktop\GME\Kaya001.xme.
到这里,我们完成了我们的基本建模工作。(流程建模以及规则建模在专业版本中才会提供)。
然后将该文件导入KAYA模型驱动引擎,就可以直接调用KAYA的API来进行我们的流程以及业务规则的开发了。(如果利用KAYA流程规则建模,可以节省大部分的开发代码编写)
剧透一下第二版的开发状况:
第二版是Web设计工具。是利用NodeJs开发的。
不同于其他的低代码平台最明显的地方就是,他本身是一个Web版本的模型设计器。橘红色部分可以作为设计文档。
整个Kaya的前后台都会用Node.js 来完成。而且,下面工具的最大特点是可配置的,你可以随心所欲的设计你自己的模型构建工具。期待吧!
下面是利用web GME来制作的模型范例,有兴趣的朋友可以看看。需要完整版请私信
有兴趣的朋友:weixin ID: chljapan 留言:MDA
欢迎讨论拍砖!!!
具体架构设计实现可以参照我的博客:KAYA
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。