CN117850752A - 通过领域模型实例化生成器构建低代码平台的方法及系统 - Google Patents
通过领域模型实例化生成器构建低代码平台的方法及系统 Download PDFInfo
- Publication number
- CN117850752A CN117850752A CN202410066192.XA CN202410066192A CN117850752A CN 117850752 A CN117850752 A CN 117850752A CN 202410066192 A CN202410066192 A CN 202410066192A CN 117850752 A CN117850752 A CN 117850752A
- Authority
- CN
- China
- Prior art keywords
- model
- code
- generator
- platform
- domain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000005538 encapsulation Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 50
- 238000011161 development Methods 0.000 claims description 40
- 238000012360 testing method Methods 0.000 claims description 34
- 238000004806 packaging method and process Methods 0.000 claims description 20
- 238000013515 script Methods 0.000 claims description 19
- 230000010354 integration Effects 0.000 claims description 8
- 238000010276 construction Methods 0.000 claims description 6
- 238000000354 decomposition reaction Methods 0.000 claims description 5
- 238000012546 transfer Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 claims description 4
- 238000012795 verification Methods 0.000 claims description 4
- 238000007689 inspection Methods 0.000 claims 1
- 238000005516 engineering process Methods 0.000 abstract description 7
- 230000004807 localization Effects 0.000 abstract description 6
- 238000007726 management method Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 7
- 238000012216 screening Methods 0.000 description 6
- 238000013473 artificial intelligence Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000007613 environmental effect Effects 0.000 description 3
- 230000008676 import Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 238000001556 precipitation Methods 0.000 description 3
- 238000003825 pressing Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000002349 favourable effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011990 functional testing Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 239000013049 sediment Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开一种通过领域模型实例化生成器构建低代码平台的方法及系统,包括如下步骤:进行环境部署与初始化;建立生成器模型、公共组件模块化和通用标签封装;建立领域模型,所述领域模型包括定义业务系统的基本信息;定义业务领域模型并分解到子领域模型,并将每个所述子领域模型模块化;定义业务单元;定义业务元素。本发明的技术方案中,与领域模型无缝接合:完美的本地化支持,可以复用企业现有的平台架构,代码框架,业务组件,解决了对平台提供商拥有的技术和服务依赖,可以根据企业的行业特点,支持特定的行业技术完善与统一性。
Description
技术领域
本发明涉及低代码技术领域,具体涉及一种通过领域模型实例化生成器构建低代码平台的方法。
背景技术
传统的应用程序开发,需要经验丰富的开发人员投入大量的时间和精力来设计、编写和测试代码。然而,这些开发人员在产业链中很难满足企业的需求,因此,企业需要一种更高效的应用程序开发方法来应对市场的需求和机会。低代码开发就是为简化应用程序开发流程而诞生的,多年来,市场上也涌现了大量的低代码平台。然而,这些低代码平台质量良莠不齐,应用场景各有侧重,1、定制化难度大:传统低代码平台提供的组件和模板可以快速创建基本应用程序,但面对对特定业务需求和定制化要求,需要对平台进行较复杂的调整和扩展,对使用人员要求较高。2、不能融合本地化架构:传统低代码平台,内嵌了一套自己固有的架构和代码风格,不能按照企业自身的开发框架调整,难以重用现有的业务组件,造成开发资源浪费,加重维护负担。3、严重依赖厂商:使用低代码平台,需要对平台提供商拥有的技术和服务依赖;4、难以切合自身的业务风格:低代码平台生成的代码和用户界面,其结构和风格已基本固定,难以按照自己的规范进行合适的调整,其结果是难以形成企业自身的沉淀。5、不能同时支持多端:现有的低代码平台,有的侧重于app端,有的侧重于pc端,有的只能生成后端,导致前后端不完整,或多端不统一,联调困难。6、不能同时支持多种技术:现有的低代码平台,支持的技术领域有的局限于微服务架构,大多都只支持企业应用和互联网应用,对流行的许多开发语言如Go、Python等支持很少,对大数据、区块链、人工智能、物联网等前沿技术支持者更是罕见。
发明内容
本发明的主要目的是提供一种通过领域模型实例化生成器构建低代码平台的方法,旨在解决现有定制化难度大,不能融合本地化架构,严重依赖厂商,难以切合自身的业务风格的问题。
为实现上述目的,本发明提出的通过领域模型实例化生成器构建低代码平台的方法,包括如下步骤:
进行环境部署与初始化;
建立生成器模型,所述生成器模型包括针对领域中的各个实体的关系进行生成器建模,使用模板化的语言编写定义组件实现公共组件模块化,对使用的标签、脚本和函数进行通用化封装实现通用标签封装;
建立领域模型,所述领域模型包括定义业务系统的基本信息;
定义业务领域模型并分解到子领域模型,并将每个所述子领域模型模块化,所述子领域模型模块化包括进行模块命名、标识模块代码、统一资源定位符和挂靠系统;
定义业务单元的基本业务属性,用于实现最基本业务功能的所述业务单元是所述生成器模型中所述公共组件的实例化依据;定义业务元素,所述业务元素是所述生成器模型中的所述通用标签的实例化依据,用于提供具体的使用属性;
所述领域模型建立完成后,通过生成器模型进行实例化,即可生成本地化的源代码。
优选地,所述生成器建模包括单一模型、主从模型、树模型、弹出模型和在线模型;所述单一模型、主从模型、树模型、弹出模型和在线模型。
优选地,所述公共组件包括页面模块、服务模块、XML模块、JavaScript模板和CSS模板;所述页面模块包括用于定义前端展示界面的模板,为了便于复用和扩展,一般按前端框架,开发语言划分为多个子模板,如单列表模板、左右二个列表的模板、树形列表模板、Form表单模板和table模板;所述服务模块包括用于定义后端服务的模板,可按公司本地平台架构、源代码框架、后台开发语言划分子模板,包括实体类、数据访问类、服务类、接口和控制类;所述XML模块用于配置和实体映射的模板;所述JavaScript模板用于前端脚本的封装;所述CSS模板用于前端样式的封装。
优选地,所述通用标签包括输入框、日期选择框、下拉框、列表信息栏、按钮、脚本段加载区、函数、类和接口
所述输入框包括可动态指定长度,高度,各类值如身份证、电话、邮箱、手机号、组织机构号、银行卡号和IP地址;
所述日期选择框包括日期、时间、日期时间、日期范围、年份和月份;
所述下拉框包括支持下拉、弹出、单选、多选、列表选择、树形选择;
所述列表信息栏包括标题栏、内容栏、分页栏;其中所述标题栏支持排序、条件筛选和字段筛选;所述分页栏支持跳转某页、每页条数、上一条、下一条、首页和末页;
所述按钮包括支持信息、警告、危险、成功和链接;支持单击、按下和释放;
所述脚本段加载区包括引入公共的或自定义的模块;
所述函数包括用于对js模板中功能封装;
所述类包括用于服务模板中方法和属性的封装;
所述接口包括用用于服务模板中方法的封装。
优选地,所述业务单元包括数据源、环境变量、业务字段和业务功能;
所述数据源包括领域实体及其关系;
所述环境变量包括公共组件需要的当前登录信息、系统信息、架构及代码信息;
所述业务字段包括实体的属性;
所述业务功能包括要提供的如新增、修改、删除和提交基本操作,要显示的列表字段和要条件搜索的字段。
优选地,所述业务元素包括界面展现风格和显示格式:
所述业务元素包括在界面上的展现风格和格式校验方式;
所述显示格式包括是对齐方式和符号。
优选地,所述定义领域模型并分解到子领域模型,将每个所述子领域模型模块化的步骤,包括如下步骤:
判断是否为一个实体;
若是一个实体,则不再继续分解,将每个所述子领域模型模块化;
若不是一个实体,则继续判断各个实体之间是否有直接关系;
若是直接关系,则不再继续分解,将每个所述子领域模型模块化;
若不是直接关系,则继续进行拆分。
优选地,所述直接关系包括主从关系;所述主从关系不包括一个从实体同时关联二个主实体和关系传递。
优选地,所述领域建模完成后,通过低代码平台内置的代码生成器,对生成器模型进行实例化,即可生成本地化的源代码的步骤之后包括:
进行功能扩展,然后通过持续集成平台,进行自动化构建,发布到测试环境,形成开发闭环。
一种通过领域模型实例化生成器构建低代码平台的系统,包括低代码平台、开发服务器、代码管理平台、持续集成平台和测试服务器;所述开发服务器用于对低代码平台生成的代码进行二次开发,功能扩展的服务器;所述测试服务器用于提供集成测试和系统测试的环境。
本发明的技术方案中,
1、与领域模型无缝接合:领域模型能帮助业务方和开发方使用同一种工具沟通,提高沟通效率,而生成器模型则是源自领域模型的天然转化,可以平滑促进低代码平台的快速应用。
2、完美的本地化支持:可以复用企业现有的平台架构,代码框架,业务组件,有利于企业自身的业务与技术沉淀,解决了对平台提供商拥有的技术和服务依赖,可以根据企业自身的技术要求,支持一种或多种开发语言如Java、C、Go、Python等,可以根据企业的行业特点,支持特定的行业技术,如大数据、区块链、人工智能、物联网等。
3、完善与统一性:可以多端支持,如小程序、app、pc端、智能终端等;可以前端、后端统一;可以支持分布式、集中式架构;可以支持多套框架组合切换,如前端react、vue,后端springBoot、SpringCloud,Flask等。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1为本发明通过领域模型实例化生成器构建低代码平台的方法的流程结构示意图。
图2为本发明通过领域模型实例化生成器构建低代码平台的方法的主从模型结构示意图。
图3为本发明通过领域模型实例化生成器构建低代码平台的方法的树模型结构示意图。
图4为本发明通过领域模型实例化生成器构建低代码平台的方法的无关系错误模型结构示意图。
图5为本发明通过领域模型实例化生成器构建低代码平台的方法的关系传递错误模型结构示意图。
图6为本发明通过领域模型实例化生成器构建低代码平台的方法的多主错误模型结构示意图
图7为本发明通过领域模型实例化生成器构建低代码平台的系统的结构示意图
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
另外,在本发明中如涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“连接”、“固定”等应做广义理解,例如,“固定”可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
另外,本发明各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
请参照图1-图7,本发明提出一种通过领域模型实例化生成器构建低代码平台的方法,包括如下步骤:
进行环境部署与初始化;
建立生成器模型,所述生成器模型包括针对领域中的各个实体的关系进行生成器建模,使用模板化的语言编写定义组件实现公共组件模块化,对使用的标签、脚本和函数进行通用化封装实现通用标签封装;
建立领域模型,所述领域模型包括定义业务系统的基本信息;
定义业务领域模型并分解到子领域模型,并将每个所述子领域模型模块化,所述子领域模型模块化包括进行模块命名、标识模块代码、统一资源定位符和挂靠系统;
定义业务单元的基本业务属性,用于实现最基本业务功能的所述业务单元是所述生成器模型中所述公共组件的实例化依据;定义业务元素,所述业务元素是所述生成器模型中的所述通用标签的实例化依据,用于提供具体的使用属性;
所述领域模型建立完成后,通过生成器模型进行实例化,即可生成本地化的源代码。
本发明的技术方案中,与领域模型无缝接合:领域模型能帮助业务方和开发方使用同一种工具沟通,提高沟通效率,而生成器模型则是源自领域模型的天然转化,可以平滑促进低代码平台的快速应用,完美的本地化支持:可以复用企业现有的平台架构,代码框架,业务组件,有利于企业自身的业务与技术沉淀,解决了对平台提供商拥有的技术和服务依赖,可以根据企业自身的技术要求,支持一种或多种开发语言如Java、C、Go、Python等,可以根据企业的行业特点,支持特定的行业技术,如大数据、区块链、人工智能、物联网等,完善与统一性:可以多端支持,如小程序、app、pc端、智能终端等;可以前端、后端统一;可以支持分布式、集中式架构;可以支持多套框架组合切换,如前端react、vue,后端springBoot、SpringCloud,Flask等。
具体的,请参照图1,通过建立业务领域模型进行业务需求分析,能清晰的了解到业务域中的实体及其相互关系。一个完善的领域模型,会牵涉到一个或多个实体。通过仔细分析这些实体之间的关系,就可以提炼出一些基本的通用的单元体。
对每类单元体进行组件化封装,模板化精炼,最终就构成了一套可复用的生成器模型。
利用代码引擎加载领域模型的配置,再对之进行实例化,就能自动生成满足业务功能需求的源代码。
更具体的,实体:就是表,分为主表,从表。如主表(学生信息表),从表(学生成绩表,学生选课表)。
在本发明的另一实施方式中,所述生成器建模包括单一模型、主从模型、树模型、弹出模型和在线模型;所述单一模型、主从模型、树模型、弹出模型和在线模型。
具体的,比较通用的业务模型包括:
单一模型:针对领域模型中的一个简单实体,这个实体与其它任何实体没有相互关系。可以为该实体单独建立一套模型,称为单一模型。
主从模型:针对领域模型中的二个实体,它们之间是一对一或一对多的主从关系,请参见图2。可以为这二个实体单独建立一套模型,称为主从模型。
树模型:对于三个及以上的实体,他们之间是一主二从或一主多从,则可以建立树模型,请参见图3。树的根节点是主实体,其下子节点均为从实体。注意,根下只有一层子节点,不考虑子节点下再分孙节点。对于多级节点树,可以通过模型融合,进行二次开发来处理。
弹出模型:在使用中需要弹出列表进行处理,而这个列表牵涉到一个或几个实体,可以将其单独封装成一个模型,称为弹出模型。
在线模型:对于某个实体,或某几个相互关联的实体,在使用中只需要提供标准化的操作,没有其它业务功能需要扩展,此时可以将其封装成在线模型。不需要生成器生成代码,通过配置即可零代码实现业务功能,实时响应客户需求。
利用这套分析方法,完全可以当把领域模型中的所有实体,拆分为多个独立的小的业务模型,然后利用二开,来解决各业务模型的功能扩展问题。
在本发明的又一实施方式中,所述公共组件包括页面模块、服务模块、XML模块、JavaScript模板和CSS模板;所述页面模块包括用于定义前端展示界面的模板,为了便于复用和扩展,一般按前端框架,开发语言划分为多个子模板,如单列表模板、左右二个列表的模板、树形列表模板、Form表单模板和table模板;所述服务模块包括用于定义后端服务的模板,可按公司本地平台架构、源代码框架、后台开发语言划分子模板,包括实体类、数据访问类、服务类、接口和控制类;所述XML模块用于配置和实体映射的模板;所述JavaScript模板用于前端脚本的封装;所述CSS模板用于前端样式的封装。
具体的,业务模型规划好后,接下来就是为每套模型定义组件。
组件的编写可能要用到编程脚本、开发语言、sql、标签、环境变量等,为了方便对组件内容进行调整,可以使用模板化的语言进行编写,如Velocity、FreeMarker等。
根据企业使用的前、后端框架不同,公共组件可划分为以下几类:
页面模板:用于定义前端展示界面的模板,为了便于复用和扩展,一般按前端框架,开发语言划分为多个子模板,如单列表模板、左右二个列表的模板、树形列表模板、Form表单模板,table模板等等。
服务模板:用于定义后端服务的模板,可按公司本地平台架构、源代码框架、后台开发语言划分子模板,如实体类、数据访问类、服务类、接口、控制类等等。
XML模板:用于配置、实体映射之类的模板。
JavaScript模板:用于前端脚本的封装。
CSS模板:用于前端样式的封装。
在本发明的又一实施方式中,所述通用标签包括输入框、日期选择框、下拉框、列表信息栏、按钮、脚本段加载区、函数、类和接口
所述输入框包括可动态指定长度,高度,各类值如身份证、电话、邮箱、手机号、组织机构号、银行卡号和IP地址;
所述日期选择框包括日期、时间、日期时间、日期范围、年份和月份;
所述下拉框包括支持下拉、弹出、单选、多选、列表选择、树形选择;
所述列表信息栏包括标题栏、内容栏、分页栏;其中所述标题栏支持排序、条件筛选和字段筛选;所述分页栏支持跳转某页、每页条数、上一条、下一条、首页和末页;
所述按钮包括支持信息、警告、危险、成功和链接;支持单击、按下和释放;
所述脚本段加载区包括引入公共的或自定义的模块;
所述函数包括用于对js模板中功能封装;
所述类包括用于服务模板中方法和属性的封装;
所述接口包括用用于服务模板中方法的封装。
具体的,在公共组件中,对某些高频使用的标签、脚本、函数进行通用化封装,达到灵活应用的目的。如:
Form表单下的Input:输入框,可动态指定长度,高度,各类值如身份证、电话、邮箱、手机号、组织机构号、银行卡号、IP地址等。
DatePicker:日期选择框,样式包括日期、时间、日期时间、日期范围、年份、月份等不同展现形式。
Select:下拉框,样式支持下拉、弹出、单选、多选、列表选择、树形选择等多种。
Table:列表信息栏,样式包括标题栏、内容栏、分页栏;其中标题栏支持排序、条件筛选、字段筛选等;分页栏支持跳转某页、每页条数、上一条、下一条、首页、末页。
Button:按钮,样式支持信息、警告、危险、成功、链接;支持单击、按下、释放等事。件
Script:脚本段加载区,引入公共的、或自定义的模块。
Function:函数,用于对js模板中功能封装。
Class:类,用于服务模板中方法、属性等的封装。
Interface:接口,用于服务模板中方法的封装。
在本发明的又一实施方式中,所述业务单元包括数据源、环境变量、业务字段和业务功能;
所述数据源包括领域实体及其关系;
所述环境变量包括公共组件需要的当前登录信息、系统信息、架构及代码信息;
所述业务字段包括实体的属性;
所述业务功能包括要提供的如新增、修改、删除和提交基本操作,要显示的列表字段和要条件搜索的字段。
具体的,定义名称、代码、上级系统、包名、版本等基本信息,以便自动化构建发布后,可以在测试系统看到该系统完整的功能。
定义领域模型
领域建模,并分解到子领域模型,颗粒度满足上述的原则。然后将每个子模型模块化,即选择对应的生成器模型,进行模块命名、标识模块代码、统一资源定位符、挂靠系统等
为模块化子领域模型定义基本的业务属性,成为具有基本功能的业务单元,是生成器模型中公共组件的实例化依据,包括:
数据源,即领域实体及其关系;
环境变量,即公共组件需要的当前登录信息、系统信息、架构及代码信息等;
业务字段,即实体的属性,如名称、代码、数据类型等;
业务功能,包括要提供的基本操作如新增、修改、删除、提交等,要显示的列表字段,要条件搜索的字段等。
在本发明的又一实施方式中,所述业务元素包括界面展现风格和显示格式:
所述业务元素包括在界面上的展现风格和格式校验方式;
所述显示格式包括是对齐方式和符号。
具体的,业务元素是生成器模型中的通用标签的实例化,提供具体的使用属性,包括:
业务元素在界面上的展现风格,是输入框,还是下拉框,或是日期框,需要提供什么格式的校验;
显示格式则指明,是左对齐、居中、还是右对齐,金额字段以人民币符号开头、千分位逗号分隔,日期是短杠还是斜杠等;
为元素展示顺序进行编号等。
在本发明的又一实施方式中,所述定义领域模型并分解到子领域模型,将每个所述子领域模型模块化的步骤,包括如下步骤:
判断是否为一个实体;
若是一个实体,则不再继续分解,将每个所述子领域模型模块化;
若不是一个实体,则继续判断各个实体之间是否有直接关系;
若是直接关系,则不再继续分解,将每个所述子领域模型模块化;
若不是直接关系,则继续进行拆分。
具体的,首先为一个业务系统进行创建领域模型,模型建立后,将其分解成多个子模型,分解的颗粒度可以参考以下原则
至少包含一个实体,能实现最基本的业务功能,这里将其称为业务单元;
多个实体之间必须有直接的关系:如有2个实体,则必须有主从关系,不能2个都是独立的实体。
在本发明的又一实施方式中,所述直接关系包括主从关系;所述主从关系不包括一个从实体同时关联二个主实体和关系传递。
具体的,实体之间没有关系传递:如有3个实体A、B、C,可以是A为主,B与C均为从;不能是A主B从和B主C从。如出现关系传递,则需要继续分解。不能出现2个及以上的主实体:如一个从实体,同时关联二个主实体,此时应拆分成2个子域模型。
在本发明的又一实施方式中,所述领域建模完成后,通过低代码平台内置的代码生成器,对生成器模型进行实例化,即可生成本地化的源代码的步骤之后包括:
进行功能扩展,然后通过持续集成平台,进行自动化构建,发布到测试环境,形成开发闭环。
具体的,可以自动从代码仓库拉取代码到本地,然后触发编译、代码质量审查、单元测试、打包、远程部署到指定节点如测试服务器这一系列流程。
在本发明的又一实施方式中,一种通过领域模型实例化生成器构建低代码平台的系统,包括低代码平台、开发服务器、代码管理平台、持续集成平台和测试服务器;所述开发服务器用于对低代码平台生成的代码进行二次开发,功能扩展的服务器;所述测试服务器用于提供集成测试和系统测试的环境。
具体的,低代码平台:一套基于微服务或SOA架构的系统,提供的核心功能包括生成器建模、领域建模、源代码引擎。其中生成器建模提供生成器模型规划,公共组件模板化封装,通用标签封装;领域建模对领域模型按业务系统、功能模块、业务元素进行分解,并适配生成器模型;源代码引擎通过加载领域模型的业务配置,实例化生成器模型的内容,输出源代码。
开发服务器:用于对低代码平台生成的代码进行二次开发,功能扩展的服务器。一般为个人站点,数量视功能需求规模而定。
代码管理平台:主要部署源代码仓库,提供代码的检出、提交、分支管理、版本管理等功能,可选用开源的gitlab、svn、csv、git、naxus等组建搭建。它可以接受低代码平台和开发服务器的代码提交与检出;而对于持续集成平台,只提供代码检出功能。
续集成平台可以自动从代码仓库拉取代码到本地,然后触发编译、代码质量审查、单元测试、打包、远程部署到指定节点如测试服务器这一系列流程。
测试服务器:提供集成测试和系统测试的环境。
本发明提出了一种先进的基于生成器模型的系统,主要特点有:
1、与领域模型无缝接合:在微服务时代,DDD领域驱动设计已大行其道。领域模型能帮助业务方和开发方使用同一种工具沟通,提高沟通效率。而生成器模型则是源自领域模型的天然转化,可以平滑促进低代码平台的快速应用。
2、完美的本地化支持:可以复用企业现有的平台架构,代码框架,业务组件,有利于企业自身的业务与技术沉淀,解决了对平台提供商拥有的技术和服务依赖。可以根据企业自身的技术要求,支持一种或多种开发语言如Java、C、Go、Python等。可以根据企业的行业特点,支持特定的行业技术,如大数据、区块链、人工智能、物联网等。
3、完善与统一性:可以多端支持,如小程序、APP、PC端、智能终端等;可以前端、后端统一;可以支持分布式、集中式架构;可以支持多套框架组合切换,如前端react、vue,后端springBoot、SpringCloud,Flask等。
4、自动化的构建与发布:可以将企业自身的开发规范、低代码平台、持续集成平台、敏捷开发平台、源代码管理平台、测试平台、生产服务平台进行关联整合,自动化的构建与发布,进行原型开发、功能拓展、快速迭代。
5、持续改进与完善:可以不断增加和改善生成器模型,扩充公共组件模板库,使低代码平台功能与业务发展同步。通过构建合适的生成器模型,约可以降低80%以上的编码量,90%以上的运维成本,降本增效极其显著。
在其中一个实施例中,以实现“客户关系管理系统”中“客户信息”模块为例,描述一下低代码平台实践的具体实施环节。采用当前最流行的平台和架构,前端开发框架vue,后端开发框架javaEE。
第一步:环境部署与初始化。包括低代码平台,开发服务器,代码管理平台,持续集成平台,测试服务器。
低代码平台:前后端分离式架构,微服务部署,关系型数据库。
开发服务器:位于开发人员本地,对开发环境没有统一要求。
代码管理平台:单节点部署源代码管理仓库gitlab、组件库nexus、版本管理工具git。创建客户关系管理系统对应的项目project_crm,包括三个分支,dev/test/prod。
持续集成平台:单节点部署Jenkins持续集成管理软件,前端NodeJs环境,包管理工具Maven、PM2。在Jenkins中安装各种插件如版本管理、nodeJS等,创建CI项目project_crm,配置jdk、maven、系统安全性验证、远程系统等。
测试服务器:部署2套以上的测试环境,分别用于windows、linux、国产操作系统和数据库软件及硬件配套环境测试。安装测试软件Jmeter、LoadRunner、Winrunner等。
第二步:生成器建模。
2.1、生成器模型创建:选用Velocity模板语言,创建“单一模型”并初始化目录结构。用于支持“客户信息”这个单实体的领域模型。
2.2、定义页面模板:solo-vue.vm,内容包括:
solo-search-vue.vm:条件搜索区;
solo-func-vue.vm:功能操作区;
solo-list-vue.vm:单列表信息区;
solo-page-vue.vm:分页栏区;
solo-form-vue.vm:表单区,包括查看、新增、修改三个子表单模板。
solo-script-vue.vm:脚本文件引用区;
solo-vue.vm模板部分内容参考如下:
#set($titleIconType=${models.titleIconType})
#set($titleName=${models.titleName})
#set($model=${models.model})
#set($moducode=${models.moduCode})
#set($tid=${models.tid})
#set($syscode=${models.sysCode})
#set($inputs=${models.inputs})
#set($button=${models.button})
#set($table=${models.table})
#set($page=${models.page})
#set($addform=${models.addform})
#set($updform=${models.updform})
#set($viewform=${models.viewform})
#set($fields=${models.fields})
#set($tablename=${models.tableName})
<template>
<Row>
<Card>
<p slot="title"> <Icon type="$titleIconType"></Icon>$titleName</p>
<Row>
<p>
#parse("com/xxx/coder/templates/solo-search-vue.vm")
#parse("com/xxx/coder/templates/solo-func-vue.vm")
</p>
</Row>
<Row>
#parse("com/xxx/coder/templates/solo-list-vue.vm")
#parse("com/xxx/coder/templates/solo-page-vue.vm")
</Row>
#parse("com/xxx/coder/templates/solo-form-vue.vm")
</Card>
</Row>
</template>
<script>
#parse("com/xxx/coder/templates/solo-script-vue.vm")
</script>
2.3、定义服务模板:
solo-entity-java.vm:定义领域实体的属性和方法;
solo-service-intf-java.vm:定义业务算法处理接口;
solo-service-impl-java.vm:定义业务算法处理实现类;
solo-controller-java.vm:定义与前端交互控制类,部分内容参考如下;
#set($model=${models.entity});
#set($moducode=${models.moduCode});
#set($syscode=${models.sysCode});
package ${controllerpackname};
@RestController;
public class ${syscode}${model}Controller extends BaseController{
@Resource(name = "${syscode}${model}Service")
private I${syscode}${model}Service ${syscode}${model}Service;
@PutMapping(value = "/${syscode}${moducod}")
@ResponseBody
public R insert${syscode}${model}(
@RequestBody ${syscode}${model} ${model}) {
return R.ok(${syscode}${model}Service.save(${model})); } }
2.4、定义XML模板:包括全局配置文件solo-application-xml.vm,实体映射文件solo-mapping-xml.vm。
2.5、定义JavaScript模板:solo-js.vm,部分内容如下:
#set($tablecolumns=${models.tablecolumns})
#set($moducode=${models.moduCode})
#set($table=${models.table})
import Vue from 'vue';
import iView from 'iview';
import datetool from '@/libs/datetool';
let ${moducode}Column = {};
${moducode}Column.getColumns = function(){
return[
#if(${table.isSelectAll}=="true")
{type:'selection', width:60, align:'center'},
#end
#if(${table})
#if($tablecolumns)
#foreach($tablecolumn in $tablecolumns)
{title: '${tablecolumn.label}',
key: '${tablecolumn.value}',
align: 'center'
#if(${tablecolumn.isDate}=="true")render: (h, params) =>{returnh('div',datetool.format(params.row.${tablecolumn.value}));}
#end
}#if($foreach.hasNext),#end
#end
#end
#end] };
export default ${moducode}Column;
2.6、定义通用标签模板:
定义Form标签:对其下常用的子标签如输入框、下位框,日期选择框、单选框、复选框等等,进行通用化封装。solo-form-vue.vm部分内容如下:
<Form#if(${addform.ref})ref="${addform.ref}"#end:model="${addform.model}"#if(${addform.rules}):rules="${addform.rules}"#end#if(${addform.labelWidth}):label-width="${addform.labelWidth}"#end#if(${addform.inline})inline#end>
#if($addformitems)
#foreach($formitem in $addformitems)
<FormItemlabel="${formitem.label}:"#if(${formitem.prop})prop="${formitem.prop}"#end#if(${formitem.required})required#end#if(${formitem.labelWidth})label-width="${formitem.labelWidth}"#end style="width:300px">
#if(${formitem.input})
<Inputv-model="${addform.model}.${formitem.input.value}"
#if(${formitem.input.type}=="textarea")type="${formitem.input.type}":autosize="{minRows:2,maxRows:5}"#end
placeholder="${formitem.input.placeholder}"/>
#end
#if(${formitem.datepicker})
<DatePickertype="date"v-model="${addform.model}.${formitem.datepicker.value}"placeholder="${formitem.datepicker.placeholder}"style="width:200px"></DatePicker>
#end
#if(${formitem.select})
<Selectv-model="${addform.model}.${formitem.select.value}" clearablefilterable #if(${formitem.select.multiple}=="true")multiple#end>
<Optionv-for="itemin${formitem.select.value}Select":value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
#end
#if(${formitem.radio})
<RadioGroup v-model="${addform.model}.${formitem.radio.value}"> <Radiov-for="itemin${formitem.radio.value}Radio" :label="item.label" :key="item.value"></Radio>
</RadioGroup>
#end
#if(${formitem.checkbox})
<CheckboxGroupv-model="${addform.model}.${formitem.checkbox.value}"><Checkboxv-for="itemin${formitem.checkbox.value}Checkbox" :label="item.label":key="item.value"></Checkbox>
</CheckboxGroup>
#end
#if(${formitem.type}=="TimePicker")
<TimePickertype="time"v-model="${addform.model}.${formitem.value}"placeholder="请输入${formitem.label}" ></TimePicker>
#end
</FormItem>
#end
#end
</Form>
其它标签定义,如table、button等同理。
第三步:领域建模。
3.1、定义业务系统:基本信息为:
系统名称:客户关系管理系统;
系统代码:crm;
上级系统:空;
包名:com.xxx.crm;
版本:1.0。
3.2、定义领域模型:基本信息为:
模块名称:客户信息;
代码:customer;
资源定位符:模块的资源访问路径,“/crm/cust”:
业务系统:即前面所定义的客户关系管理系统,代码为crm;
生成器模型:即预先定义好的模型及其模板,此处为“单一模型”;
关联实体:t_customer,即客户表。
3.3、定义业务单元
定义数据源:t_customer,单实体;
环境变量:以键值对方式定义;
${CUR_UID}:当前登录人ID;
${CUR_ORG_ID}:是当前登录人机构ID,${CUR_SYS_NAME}是当前系统名称等。
业务字段:定义实体的属性,主要有:
id:主键,bigint;
code:客户编号,varchar(20);
name:客户名称,varchar(50);
birth:客户生日,date;
tel:联系电话,varchar(20);
trade:所属的行业或领域,例如金融、制造等,char(2);
desc:关于客户的补充说明或备注信息,varchar(255);
photo:客户照片;
业务功能:提供条件搜索、列表信息查看、分页栏、提供新增、修改、删除、查看基本功能。
3.4、定义业务元素:定义各实体属性的展现方式
id:后台自动生成,不显示,不允许修改;
code:输入框,不允许与现有客户数据重复,长度6~15位,由字母、数字、下划线构成;
name:输入框,不允许出现特殊字符;
birth:日期选择框;
tel:输入框,要通过手机号校验;
trade:下拉树形选择框,只能单选;
desc:多行文本输入框;
photo:支持文件上传,显示图片。
第四步:代码生成与构建
4.1、生成代码:将“客户信息”模块相关的定义和配置,实例化“单一模型”的各个组件模板,生成一套前后端分离的源代码,前端基于vue框架,后端基于javaEE平台。
4.2、代码提交:将生成的“客户关系管理系统”源代码上传到源代码管理平台gitlab的porject_crm项目的dev分支。
4.3、二次开发:“开发服务器”从gitlab下载源porject_crm项目的代码,进行功能扩展,然后提交到dev分支,并将分支合并到test分支。
4.4、构建与发布:在持续集成平台进行一键部署,将porject_crm项目发布到测试环境。
4.5、系统测试:登录客户关系管理系统,进行功能测试和性能测试。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。
Claims (10)
1.一种通过领域模型实例化生成器构建低代码平台的方法,其特征在于,包括如下步骤:
进行环境部署与初始化;
建立生成器模型,所述生成器模型包括针对领域中的各个实体的关系进行生成器建模,使用模板化的语言编写定义组件实现公共组件模块化,对使用的标签、脚本和函数进行通用化封装实现通用标签封装;
建立领域模型,所述领域模型包括定义业务系统的基本信息;
定义业务领域模型并分解到子领域模型,并将每个所述子领域模型模块化,所述子领域模型模块化包括进行模块命名、标识模块代码、统一资源定位符和挂靠系统;
定义业务单元的基本业务属性,用于实现最基本业务功能的所述业务单元是所述生成器模型中所述公共组件的实例化依据;定义业务元素,所述业务元素是所述生成器模型中的所述通用标签的实例化依据,用于提供具体的使用属性;
所述领域模型建立完成后,通过所述生成器模型进行实例化,即可生成本地化的源代码。
2.如权利要求1所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述生成器建模包括单一模型、主从模型、树模型、弹出模型和在线模型;所述单一模型、主从模型、树模型、弹出模型和在线模型。
3.如权利要求1所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述公共组件包括页面模块、服务模块、XML模块、JavaScript模板和CSS模板;所述页面模块包括用于定义前端展示界面的模板,为了便于复用和扩展,一般按前端框架,开发语言划分为多个子模板,如单列表模板、左右二个列表的模板、树形列表模板、Form表单模板和table模板;所述服务模块包括用于定义后端服务的模板,可按公司本地平台架构、源代码框架、后台开发语言划分子模板,包括实体类、数据访问类、服务类、接口和控制类;所述XML模块用于配置和实体映射的模板;所述JavaScript模板用于前端脚本的封装;所述CSS模板用于前端样式的封装。
4.如权利要求1所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述通用标签包括输入框、日期选择框、下拉框、列表信息栏、按钮、脚本段加载区、函数、类和接口。
5.如权利要求1所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述业务单元包括数据源、环境变量、业务字段和业务功能;
所述数据源包括领域实体及其关系;
所述环境变量包括公共组件需要的当前登录信息、系统信息、架构及代码信息;
所述业务字段包括实体的属性;
所述业务功能包括要提供的如新增、修改、删除和提交基本操作,要显示的列表字段和要条件搜索的字段。
6.如权利要求1所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述业务元素包括界面展现风格和显示格式:
所述业务元素包括在界面上的展现风格和格式校验方式;
所述显示格式包括是对齐方式和符号。
7.如权利要求1-6中任一所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述定义业务领域模型并分解到子领域模型,并将每个所述子领域模型模块化,所述子领域模型模块化包括进行模块命名、标识模块代码、统一资源定位符和挂靠系统的步骤,包括如下步骤:
判断是否为一个实体;
若是一个实体,则不再继续分解,将每个所述子领域模型模块化,所述子领域模型模块化包括进行模块命名、标识模块代码、统一资源定位符和挂靠系统;
若不是一个实体,则继续判断各个实体之间是否有直接关系;
若是直接关系,则不再继续分解,将每个所述子领域模型模块化,所述子领域模型模块化包括进行模块命名、标识模块代码、统一资源定位符和挂靠系统;
若不是直接关系,则继续进行拆分。
8.如权利要求7所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述直接关系包括主从关系;所述主从关系不包括一个从实体同时关联二个主实体和关系传递。
9.如权利要求8所述的通过领域模型实例化生成器构建低代码平台的方法,其特征在于,所述领域建模完成后,通过低代码平台内置的代码生成器,对生成器模型进行实例化,即可生成本地化的源代码的步骤之后包括:
进行功能扩展,然后通过持续集成平台,进行自动化构建,发布到测试环境,形成开发闭环。
10.一种通过领域模型实例化生成器构建低代码平台的系统,其特征在于,包括低代码平台、开发服务器、代码管理平台、持续集成平台和测试服务器;所述低代码平台用于程序被执行时实现如权利要求1-8中任一所述的通过领域模型实例化生成器构建低代码平台的方法,用于生成器建模、领域建模和源代码引擎;所述开发服务器用于对低代码平台生成的代码进行二次开发,功能扩展的服务器;所述代码管理平台用于部署源代码仓库;所述测试服务器用于提供集成测试和系统测试的环境;所述持续集成平台用于自动从代码仓库拉取代码到本地,然后触发编译、代码质量审查、单元测试、打包、远程部署到指定节点的流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410066192.XA CN117850752B (zh) | 2024-01-17 | 2024-01-17 | 通过领域模型实例化生成器构建低代码平台的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410066192.XA CN117850752B (zh) | 2024-01-17 | 2024-01-17 | 通过领域模型实例化生成器构建低代码平台的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117850752A true CN117850752A (zh) | 2024-04-09 |
CN117850752B CN117850752B (zh) | 2024-06-25 |
Family
ID=90545872
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410066192.XA Active CN117850752B (zh) | 2024-01-17 | 2024-01-17 | 通过领域模型实例化生成器构建低代码平台的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117850752B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070226751A1 (en) * | 2006-03-23 | 2007-09-27 | Sap Ag | Systems and methods for providing an enterprise services description language |
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
US20120102451A1 (en) * | 2010-01-13 | 2012-04-26 | Tata Consultancy Services Limited | Computationally efficient system for developing configurable, extensible business application product lines using model-driven techniques |
CN113721892A (zh) * | 2021-08-25 | 2021-11-30 | 上海东普信息科技有限公司 | 领域建模方法、装置、计算机设备和存储介质 |
US20220350622A1 (en) * | 2021-04-28 | 2022-11-03 | Arris Enterprises Llc | Dynamic update of containerized features based on feature configuration |
CN115640045A (zh) * | 2022-12-26 | 2023-01-24 | 卓望数码技术(深圳)有限公司 | 基于领域驱动设计的低代码开发平台及业务系统创建方法 |
CN115840564A (zh) * | 2022-11-11 | 2023-03-24 | 北京中科蜂巢科技有限公司 | 基于多架构建模语言的一体化模型构建方法、装置及系统 |
WO2023143151A1 (zh) * | 2022-01-27 | 2023-08-03 | 阿里云计算有限公司 | 一种代码开发方法、服务器及存储介质 |
-
2024
- 2024-01-17 CN CN202410066192.XA patent/CN117850752B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070226751A1 (en) * | 2006-03-23 | 2007-09-27 | Sap Ag | Systems and methods for providing an enterprise services description language |
CN101256492A (zh) * | 2008-03-31 | 2008-09-03 | 宋乃辉 | 一种进行模型驱动架构的软件开发方法及其系统 |
US20120102451A1 (en) * | 2010-01-13 | 2012-04-26 | Tata Consultancy Services Limited | Computationally efficient system for developing configurable, extensible business application product lines using model-driven techniques |
US20220350622A1 (en) * | 2021-04-28 | 2022-11-03 | Arris Enterprises Llc | Dynamic update of containerized features based on feature configuration |
CN113721892A (zh) * | 2021-08-25 | 2021-11-30 | 上海东普信息科技有限公司 | 领域建模方法、装置、计算机设备和存储介质 |
WO2023143151A1 (zh) * | 2022-01-27 | 2023-08-03 | 阿里云计算有限公司 | 一种代码开发方法、服务器及存储介质 |
CN115840564A (zh) * | 2022-11-11 | 2023-03-24 | 北京中科蜂巢科技有限公司 | 基于多架构建模语言的一体化模型构建方法、装置及系统 |
CN115640045A (zh) * | 2022-12-26 | 2023-01-24 | 卓望数码技术(深圳)有限公司 | 基于领域驱动设计的低代码开发平台及业务系统创建方法 |
Non-Patent Citations (2)
Title |
---|
张弛: "天基网络智能卫星的软件开发工具链设计", 中国优秀硕士学位论文全文库, no. 2021, 15 January 2021 (2021-01-15) * |
李晋;战德臣;聂兰顺;徐晓飞;: "支持模型驱动式软件开发的建模语言框架研究", 南京大学学报(自然科学版), no. 04, 30 July 2010 (2010-07-30) * |
Also Published As
Publication number | Publication date |
---|---|
CN117850752B (zh) | 2024-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825362B (zh) | 低代码应用软件开发系统及方法 | |
US11099823B2 (en) | Systems and methods for transformation of reporting schema | |
CN105487864B (zh) | 代码自动生成的方法和装置 | |
US8418125B2 (en) | Incremental model refinement and transformation in generating commerce applications using a model driven architecture | |
US8966441B2 (en) | Dynamic scripts to extend static applications | |
CN110069246A (zh) | 一种Java Web应用快速开发的平台系统及其应用 | |
US20070011650A1 (en) | Computer method and apparatus for developing web pages and applications | |
CN115658041B (zh) | 基于在线业务流程编排的低代码增强业务实现方法 | |
EP3047372B1 (en) | Computer-aided development of native mobile application code | |
CN108984712A (zh) | 基于业务场景的造数方法、设备及可读存储介质 | |
CN107851001B (zh) | 用于基于设计规格显示软件型应用程序的计算机应用的方法 | |
CN104793961A (zh) | 使用原生Web代码的快速JavaWeb开发方法及系统 | |
CN108694214A (zh) | 数据报表的生成方法、生成装置、可读介质及电子设备 | |
WO2004086222A2 (en) | Development of software systems | |
CN106648587A (zh) | 一种基于注解的Web应用代码生成方法 | |
WO2006099046A2 (en) | Automated interface-specification generation for enterprise architectures | |
CN112860260B (zh) | 一种在高校场景下基于web的跨平台应用构建工具及方法 | |
WO2007050110A2 (en) | Method and model for enterprise system development and execution | |
CN106843827A (zh) | 一种基于功件树和功件库的目标软件生成方法及装置 | |
CN111427555A (zh) | 一种轻量化智能合约框架及合约开发方法 | |
US20120060141A1 (en) | Integrated environment for software design and implementation | |
CN111694551A (zh) | 一种云物业开发平台 | |
CN117850752B (zh) | 通过领域模型实例化生成器构建低代码平台的方法及系统 | |
Koznov et al. | DocLine: A method for software product lines documentation development | |
US10621552B1 (en) | Dynamically controlling case model structure using case fragments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |