一种应用系统构建和运行方法及装置与流程

文档序号:33636032发布日期:2023-03-29 00:36阅读:54来源:国知局
一种应用系统构建和运行方法及装置与流程

1.本发明涉及计算机技术领域,更具体地,涉及一种应用系统构建和运行方法及装置。


背景技术:

2.系统框架是系统开发过程中提取特定领域软件的共性部分形成的体系结构不同领域的软件项目有着不同的框架类型。由于提取了特定领域软件的共性部分因此在这个领域内新项目的开发过程中有关构架的代码不需要重新编写只需要在框架的基础上进行一些开发和调整便可满足要求;对于开发过程而言这样做会提高软件的质量降低成本缩短开发时间使系统开发人员从烦琐的框架开发中解脱出来专注研究系统分析设计等工作。
3.基于目前主流的软件开发框架和方法开发的应用系统,存在有各模块耦合度高、系统结构复杂,在业务模块之间的调用、引用、交互过程中中仍然有较为复杂的技术细节需要开发。不但导致开发人员需要掌握大量的编程技巧以及编程技术知识,并且开发工作量大,还导致应用程序的修改更新升级变得笨重、困难、高成本。因此,如何进一步降低应用程序开发和升级更新的难度是亟待解决的问题。
4.另一方面,当前主流软件开发方法都不能很好的解决标准化产品与客户个性化需求的矛盾,如何使得标准化系统的开发能自动同步反应到定制化过的系统之中,定制化过的系统不会影响到标准化系统中,如何降低标准化和定制化并存的应用系统的开发和维护的成本,也是亟待解决的问题。


技术实现要素:

5.本发明针对现有技术中存在的技术问题,提供一种应用系统构建和运行方法及装置,使得应用程序开发者基于一套高重用度的框架和高重用度的通用部件基础下开发自己的业务功能,大大简化整体系统架构设计和业务功能的开发。应用程序的各个部分可以充分解耦,各个模块独立修改、独立发布,大大提高系统更新、升级、发布维护的效率。可以方便其他独立应用程序已有功能,并保持同步更新升级。从而很好的解决标准化和个性化并存的问题,很好的解决了软件的标准化和个性化的矛盾,大大提高了软件开发效率,大大的促进数字化系统的低成本开发和普及。并且,基于上述的架构模式,本发明还提供了一种图形化可视化基于语义而非编程语言语法的业务模块的开发工具,使得业务开发者可以轻松无误的基于通用部件开发出业务模块。
6.作为本发明的第一方面,提供了一种应用系统构建和运行方法,包括:
7.获取开发者输入的应用系统名称,基于所述应用系统名称,创建应用系统的代码文件存放的应用目录;
8.在所述应用目录中创建元素及其对应的元素代码;根据是否调用其他元素,所述元素分为原子元素、复合元素,所述复合元素基于元素名称引用其他元素并调用其他元素的函数;
9.在所述应用目录中,创建所述应用系统的配置文件,并在所述配置文件中配置所述应用系统继承或引用的父应用和所述应用系统需要使用的资源,所述资源包括数据库;
10.将所述应用目录保存至应用代码仓库中,完成所述应用系统的构建,并通过预设的运行框架程序加载运行所述的应用系统。
11.进一步的,所述的通过预设的运行框架程序加载运行所述的应用系统,包括:
12.获取使用者输入的应用系统名称及其对应的功能名称;
13.所述运行框架程序根据所述应用系统名称,从所述应用代码仓库中下载并加载其对应的应用目录及文件;
14.所述运行框架程序根据所述功能名称,加载所述应用目录中的配置文件及其相关元素,并触发所述相关元素的元素代码的运行,完成所述应用系统的运行;
15.其中,所述运行框架中还包括应用加载模块;
16.所述运行框架程序加载应用时,触发所述应用加载模块,根据所述应用系统名称,从所述应用代码仓库中下载并加载其对应的应用目录及文件后,从所述应用目录中读取数据,构建所述应用系统对应的名字空间,在所述名字空间中记录所述元素名称及其对应的元素代码的存放位置;
17.所述运行框架中还包括元素加载模块,所述运行框架程序加载所述应用目录中的元素时,或者复合元素的代码中基于元素名称引用其他元素时,触发所述的元素加载模块根据所述的其他元素的名称在所述应用系统的名字空间中查找该名字,当所述元素名称不在所述名字空间中时,加载所述应用系统继承或引用的父应用,并在所述父应用的名字空间中查找所述元素名称,直至找到所述元素名称后,从所述元素名称对应的元素代码的存放位置加载元素代码;
18.所述运行框架中还包括消息机制模块,利用所述消息机制模块,实现应用系统中所包含的元素间的函数调用;所述消息机制模块包括消息与响应函数的映射关系注册表、映射关系注册程序、消息触发程序;
19.所述消息与响应函数的映射关系注册表,用于存储消息与响应函数的映射关系;
20.在应用系统中的元素以消息映射方式注册消息与响应函数的调用时,通过所述映射关系注册程序将元素的消息与响应函数的映射关系添加至所述消息与响应函数的映射关系注册表中;当元素通过消息机制模块发送消息时,触发所述消息触发程序,从消息与响应函数的映射关系注册表中获取其对应的响应函数,并触发所述响应函数的运行。
21.进一步的,所述元素包括:页面、组件和数据类型,其中所述数据类型包括基础数据类型和由基础数据类型构建而成的复合数据类型。
22.进一步的,所述数据类型包含相应数据变量的配置方法和可视化配置界面,用于对数据变量的各项设置进行配置,数据变量根据所配置的设置来运行相应的逻辑,其中所述配置方法包括从所生成的数据变量中读取数据的方法以及往所生成的数据变量中写数据的方法。
23.进一步的,所述基础数据类型包括数字、文本、时间、文件等,所述复合数据类型基于所述基础数据类型构造而成;所述复合数据类型用于自定义数据格式和数据处理函数,自定义消息并通过触发消息的方式调用外部函数,支持跨网络调用。
24.进一步的,所述组件,通过暴露数据变量的方式与外部进行数据交互,组件内部根
据数据变量的数据模型和数据值来动态决定其显示数据的形式和内容、操作数据的方式,外部通过引用和操作数据变量,实现与组件的数据交互;
25.组件包含可视化配置界面,用于在图形化的页面开发工具中针对相应的组件实例配置数据;
26.组件通过暴露其运行过程中可发出的消息列表的方式与外部元素进行行为交互,外部用消息处理函数与组件的消息建立关联关系,当组件内部的消息发生时,从该关联关系表中找到所述的消息处理函数并调用,以此实现组件与外部的行为交互。
27.进一步的,所述页面包括入口页面和业务页面;所述入口页面作为应用系统的入口,通过业务页面的名称和标题,对业务页面的标题进行组织、显示,通过点击入口页面上的业务页面的入口标题使用业务页面。
28.进一步的,所述页面由组件、数据变量、消息处理函数、消息与处理函数关联关系构造组成;
29.基于所述数据类型创建数据变量,不同的组件关联或绑定特定的数据变量;组件根据特定的数据变量来显示用户界面或者对数据变量进行操作来改变数据变量;通过消息与处理函数关联关系,使得当组件发出消息时,其所关联的处理函数被运行框架调用执行,在消息处理函数中,修改本组件以及其他组件所绑定的数据变量,从而做到在不修改组件内部代码的情况下,实现组件之间的相互调用和相互数据传递。
30.进一步的,所述页面的代码编写方法包括:
31.1)从应用程序的程序资源包中,找到所有组件类元素,并进行图形化显示;
32.2)基于图形界面选择一个组件元素,生成创建组件实例的代码;
33.3)从应用程序的程序资源包中,找到所有数据类型类元素,并进行图形化显示;
34.4)开发者基于图形界面选择一个数据类型,生成创建数据变量并把数据变量与组件实例进行关联绑定的代码;
35.5)基于绑定的数据变量,图形化显示组件实例和数据变量的配置界面,配置组件使用数据变量的选项,生成设置组件实例和数据变量的配置项的代码;
36.6)图形化显示组件的所有可发出的消息,以及其他组件的可调用函数;
37.7)选择一个组件实例的消息,选择或生成一个对应的消息处理函数,创建一个关联关系,以此生成在运行框架中注册组件的消息和消息处理函数的关联关系的代码;
38.8)基于上述的消息处理函数,在消息处理函数中,图形化的创建组件函数调用语句或者变量赋值语句,以此生成读取和修改组件所绑定的数据变量的代码;其中,图形化的创建变量赋值语句,包括:(1)图形化显示本页面范围内可用的所有元素及其写数据函数;(2)开发者选择一个元素及其写数据函数,作为赋值语句中接收数据的左值;(3)图形化显示本页面范围内可用的所有元素及其读数据函数;(4)开发者选择一个元素及其读数据函数,作为赋值语句中提供数据的右值;
39.9)保存上述步骤生成的代码,即得到一个页面元素的代码。
40.作为本发明的第二方面,提供一种应用系统构建和运行装置,包括:
41.目录创建模块,用于获取开发者输入的应用系统名称,基于所述应用系统名称,创建应用系统的代码文件存放的应用目录;
42.元素创建模块,用于在所述应用目录中创建元素及其对应的元素代码;所述元素
包括基础数据类型、复合数据类型,所述复合数据类型基于元素名称引用其他元素并调用其他元素的函数;
43.文件配置模块,用于在所述应用目录中,创建所述应用系统的配置文件,并在所述配置文件中配置所述应用系统继承或引用的父应用和所述应用系统需要使用的资源,所述资源包括数据库;
44.构建及运行模块,用于将所述应用目录保存至应用代码仓库中,完成所述应用系统的构建,并通过预设的运行框架程序加载运行所述的应用系统。
45.本发明提供的一种应用程序构建方法、系统、电子设备及存储介质,方法包括:获取开发者输入的应用系统名称,基于上述应用系统名称,创建应用系统的代码文件存放的应用目录;在上述应用目录中创建原子元素及其对应的原子元素代码;基于上述原子元素和/或其他复合元素,创建复合元素及其复合元素代码;在上述应用目录中,创建上述应用系统的配置文件,并在上述配置文件中配置上述应用系统继承或引用的父应用和上述应用系统需要使用的资源,上述资源包括数据库;将上述应用目录保存至应用代码仓库中,完成上述应用系统的构建;其中,上述原子元素代码和上述复合元素代码中,通过基于元素名称的动态加载方式引用其他元素并调用其对应的函数,并通过基于消息映射方式发送消息触发预设函数的调用。本发明通过根据开发者输入的应用系统名称创建应用系统的应用目录,并在上述应用目录中存放原子元素和复合元素以及配置文件,并通过配置文件配置上述应用系统继承或引用的父应用,并且通过元素名称的动态加载方式引用其他元素并调用其他元素的函数,还通过基于消息映射方式发送消息触发预设函数的调用,从而完成了应用程序的整体构建,实现了基于元素颗粒度的系统模块化构建方法,大大简化了应用程序各个模块之间的引用以及函数调用方法,进而进一步的降低了软件开发的复杂度以及提高了软件开发的效率。
附图说明
46.图1为本发明提供的一种应用系统构建和运行方法流程图;
47.图2为本发明提供的一种可能的应用场景示意图;
48.图3为本发明提供的框架系统详细结构示意图;
49.图4为本发明提供的框架系统运行流程示意图;
50.图5为本发明提供的一种应用系统构建和运行装置结构示意图。
具体实施方式
51.下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
52.请参阅图1,图1为本发明实施例提供的一种应用系统构建和运行方法流程图,如图1所示,一种应用系统构建和运行方法,包括:
53.步骤s100:获取开发者输入的应用系统名称,基于所述应用系统名称,创建应用系统的代码文件存放的应用目录;
54.需要说明的是,本实施例方法的执行主体可以是具有数据处理、网络通信及程序运行功能的计算机终端设备,例如:电脑、平板电脑等;也可以是具有相同相似功能的服务
器设备,还可以是具有相似功能的云服务器,本实施例对此不做限制。为了便于理解,本实施例及下述各实施例将以服务器设备为例进行说明。
55.可以理解的是,上述开发者可以是有开发能力或者开发需求的应用系统构建人员,本实施例对此不作限制。
56.应理解的是,上述应用目录可以是创建在上述服务器本地的硬盘上的一块存储区域,也可以是创造在一个远程服务器的硬盘上是一块存储区域,上述存储区域用于存放上述应用系统的代码文件,上述代码文件包括上述应用程序中的元素以及配置文件。
57.步骤s200:在所述应用目录中创建元素及其对应的元素代码;上述元素包括基础数据类型、数据模型、数据模型、页面。
58.可以理解的是,上述基础数据类型可以是用于构建上述应用目录的基础单元,上述基础数据类型可以是本实施例方法对应的框架系统提供的基础元素。上述基础数据类型可以包括基础的数字、文本、时间等。本实施例对此不作限制。
59.应理解的是,上述基础数据类型元素,用于创建数据变量,提供数据变量的参数配置,以使所述数据变量根据所述参数配置进行逻辑处理。
60.上述数据模型元素,用于创建数据变量。数据模型可以是基于两个或两个以上的基础数据类型组合构建而成。基于数据模型元素,可以自定义数据格式,提供数据计算和处理函数自定义界面以及消息自定义界面,并通过自定义的数据计算和处理函数来访问和操作数据库中的数据,通过消息即消息机制与其他组件元素交互。
61.上述组件元素,用于自定义数据读取、展示、操作的用户界面,组件元素可以暴露数据变量,可以根据输入的数据变量来动态进行数据展示和提供数据操作方式,并通过所述组件元素内部的消息及消息机制与其他组件元素交互。
62.上述页面元素又分为入口页面和业务页面。入口页面是应用程序的入口,使用者通过入口页面进入应用程序,入口页面通过业务页面的名称和标题,把业务页面的标题组织和显示出来,使用者通过点击入口页面上的业务页面的入口标题使用业务页面。进一步的,业务页面也可以作为其他业务页面的入口页面,把其他业务页面组织和呈现出来。入口页面只需基于业务页面的名称信息就可以动态的呈现和打开业务页面,从而可以在不修改和编译入口页面的情况下动态的增删改业务页面。
63.上述业务界面,用于自定义用户交互界面,由组件、数据变量、消息处理函数、消息与消息处理函数关系组成。
64.基于所述数据类型创建数据变量,不同的组件关联或绑定特定的数据变量;组件根据特定的数据变量来显示用户界面或者对数据变量进行操作来改变数据变量;通过消息与处理函数关联关系,使得当组件发出消息时,其所关联的处理函数被运行框架调用执行,在消息处理函数中,修改本组件以及其他组件所绑定的数据变量,从而做到在不修改组件内部代码的情况下,实现组件之间的相互调用和相互数据传递。
65.步骤s300:在所述应用目录中,创建所述应用系统的配置文件,并在所述配置文件中配置所述应用系统继承或引用的父应用和所述应用系统需要使用的资源,所述资源包括数据库;
66.可以理解的是,上述配置文件可以用于配置上述应用系统中多个元素之间的关联关系,还可以用于配置上述应用系统中各个功能模块对应的多个元素以及多个元素之间的
关联关系,还可以用于配置上述应用系统继承或引用的父应用,以及上述应用系统需要使用的资源文件,其中资源文件包括但不限于数据库、代理服务器等。
67.步骤s400:将所述应用目录保存至应用代码仓库中,完成所述应用系统的构建,并通过预设的运行框架程序加载运行所述的应用系统。
68.可以理解的是,将上述应用目录保存至上述应用代码仓库中的步骤可以是将上述应用目录中的元素以及配置文件上传至上述应用代码仓库的步骤。其中,代码仓库可以是上述服务器上的一个代码仓库服务、也可以是服务器本地的硬盘上的一块公共存储区域,也可以是远程服务器上的一个代码仓库服务、也可以是远程服务器的硬盘上的一块公共存储区域,在此不做限制。
69.进一步的,所述的通过预设的运行框架程序加载运行所述的应用系统,包括:
70.步骤s500:获取使用者输入的应用系统名称及其对应的功能名称;
71.可以理解的是,上述使用者可以是需要通过上述应用系统完成某些特定的操作的人员,上述运行框架程序可以是本实施例提供的用于加载上述应用系统的基础框架系统。
72.在具体实现中,上述应用系统的使用者在需要访问或调用上述应用系统时,会先访问上述运行框架程序,并输入上述应用系统的应用系统名称及其对应的功能名称。
73.步骤s600:所述运行框架程序根据所述应用系统名称,从所述应用代码仓库中下载并加载其对应的应用目录及文件;
74.在具体实现中,上述运行框架系统会根据上述应用系统名称,从上述代码仓库中查找其对应的应用目录,并将上述应用目录中的资源文件以及代码下载至上述运行框架程序中,并对上述资源文件以及代码进行加载。
75.步骤s700:所述运行框架程序根据所述功能名称,加载所述应用目录中的配置文件及其相关元素,并触发所述相关元素的元素代码的运行,完成所述应用系统的运行。
76.进一步的,所述运行框架程序包括应用加载程序。
77.所述运行框架程序根据所述应用系统名称,从所述应用代码仓库中下载并加载其对应的应用目录及文件后,通过应用加载程序从所述应用目录中读取数据,构建所述应用系统中元素名称对应的名字空间,在所述名字空间中记录所述元素名称及其对应的元素代码的存放位置。
78.进一步的,所述运行框架还包括元素加载程序。
79.所述运行框架程序加载所述应用目录中的元素时,或者复合元素的代码中基于元素名称引用其他元素时,触发所述的元素加载模块根据所述的其他元素的名称在所述应用系统的名字空间中查找该名字,
80.在所述应用系统对应的名字空间中查找所述元素名称,当所述元素名称不在所述名字空间中时,加载所述应用系统继承或引用的父应用,并在所述父应用的名字空间中查找所述元素名称,直至找到所述元素名称后,从所述元素名称对应的元素代码的存放位置加载元素代码。
81.进一步的,所述运行框架程序根据所述功能名称,加载所述应用目录中的配置文件及其相关元素,并触发所述相关元素的元素代码的运行,还包括:
82.利用所述运行框架程序所包含的消息机制,实现应用系统中所包含的元素间的函数调用;所述消息机制包括消息与响应函数的映射关系注册表、映射关系注册程序、消息触
发程序;
83.所述消息与响应函数的映射关系注册表,用于存储消息与响应函数的映射关系;
84.在应用系统中的元素以消息映射方式注册组件的消息与响应函数的调用关系时,通过所述映射关系注册程序将元素发送的消息与响应函数的映射关系添加至所述消息与响应函数的映射关系注册表中;当组件的发出消息时,触发消息触发程序,从消息与响应函数的映射关系注册表中获取其对应的响应函数,并触发所述响应函数的运行。
85.可以理解的是,本发明实施例提出了一种应用程序构建方法,实现了基于元素颗粒度的系统模块化构建方法,大大简化了应用程序各个模块之间的引用以及函数调用方法,进而进一步的降低了软件开发的复杂度以及提高了软件开发的效率。
86.在一种可能的应用场景中,本发明实施例还包括一种第三方程序加载的方法,其方法包括:
87.步骤s010:基于从客户端获取到的第三方程序的访问请求,加载其对应的入口元素;
88.可以理解的是,上述第三方程序可以是指开发者根据每个项目现场的实际需求,利用本实施例提供方法对应的的框架系统配置开发出来的业务系统,上述第三方程序通常包含有程序主体,主体内部关联关系以及程序入口,还可以包含有其他程序附属功能模块,本实施例对此不作限制。
89.应理解的是,上述第三方程序可以是包括前端主体部分以及后端主体部分,前端主体部分还可以包括web端部分、app端部分以及小程序端部分等任意用于与用户交互的部分,后端主体部分还可以包括程序业务逻辑部分、数据库交互部分以及与第三方接口部分,本实施例对此不作限制。
90.还可以理解的是,上述入口元素可以是程序入口,用于程序对外暴露的访问接口,用于用户通过此访问接口访问上述第三方程序,上述入口元素可以是首页导航页面、也可以一个登陆页面,也可以是一个url地址本,实施例对此不作限制。
91.还应理解的是,上述入口元素可以是本实施例提供的方法对应的框架系统中为开发者提供构建第三方程序时所需要的各种部件(这里称为“元素”),其元素分为页面元素、组件元素、数据类型元素、数据模型元素等多种类型,上述元素之间可以是基于按名字加载的方式动态的相互引用/使用,并基于消息与消息处理函数关联关系触发的方式相互调用。
92.进一步的,所述基于从客户端获取到的第三方程序的访问请求,加载其对应的入口元素的步骤,包括:
93.步骤s011:获取客户端发送的第三方程序的访问请求,基于所述访问请求,获取其对应的第三方程序名称;
94.步骤s012:基于所述第三方程序名称,获取其对应的命名空间;
95.步骤s013:在所述命名空间中获取所述第三方程序名称对应的入口元素并加载。
96.可以理解的是,本实施例方法可以在上述第三方程序初始化时为其在服务器的硬盘上创建一个命名空间,上述命名空间用于存放上述第三方程序的元素(页面、组件等)以及元素间的业务逻辑关系,在使用本实施例方法加载上述第三方程序时,首先会在其对应的命名空间中寻找去对应的入口元素以及其他元素,并根据元素的名称去命名空间中找到上述元素的具体实现并对其进行加载,因此,上述元素也可以动态的修改和添加到目标应
用程序中,且目标应用程序整体不需要重新编译和发布。
97.步骤s020:获取所述入口元素的元素引用关系,并基于其对应的引用元素名称,加载所述引用元素名称对应的业务元素;
98.可以理解的是,上述入口元素可以是调用的一个页面组件,上述页面组件中可以包含有多个其他的业务元素,因此,上述入口元素中就引用了多个其他的业务元素,上述元素引用关系即是指上述入口元素与多个其他的业务元素之间的引用关系,并且通过元素的名称即可实现对应业务元素的加载。
99.应理解的是,上述第三方程序中还可以包括入口页面和业务页面。其中,入口页面是应用程序的入口,使用者通过入口页面进入应用程序,入口页面通过业务页面的名称和标题,把业务页面的标题组织和显示出来,使用者通过点击入口页面上的业务页面的入口标题使用业务页面。上述业务页面,也可以是作为其他业务页面的入口页面,把其他的业务页面组织和呈现出来,具体的,入口页面只需要基于业务页面的名称信息就可以动态的呈现和打开业务页面,从而可以在不修改和编译入口页面的情况下动态的增删改业务页面。
100.进一步的,所述获取所述入口元素的元素引用关系,并基于其对应的引用元素名称,加载所述引用元素名称对应的业务元素的步骤,包括:
101.步骤s021:获取所述入口元素的元素引用关系,当所述元素引用关系对应的业务元素,在所述命名空间内时,加载所述业务元素。
102.进一步的,所述当所述元素引用关系对应的业务元素,在所述命名空间内时,加载所述业务元素的步骤,还包括:
103.步骤s022:当所述元素引用关系对应的业务元素,不在所述命名空间内时,获取所述第三方程序的父类程序的父类命名空间,在所述父类命名空间中获取所述业务元素并加载。
104.可以理解的是,上述命名空间可以是用于存储第三方程序的相关资源文件以及代码,当上述第三方程序是基于另外一个程序(父类程序)构建时,上述命名空间与父类程序的命名空间也可以实现继承,当使用本实施例方法加载上述第三方程序时,首先在元素所在的应用程序的命名空间中寻找,如果找不到,就去该应用程序所继承的应用程序中寻找,以此实现应用程序的继承特性。
105.步骤s030:基于所述业务元素对应的业务处理逻辑,获取其对应的预设消息注册表中关联元素;
106.可以理解的是,上述预设消息注册表可以是本实施例方法针对于每一个第三方程序在其命名空间中创建的一个消息处理映射注册表,当元素发生消息事件时,就可以先在消息处理映射注册表中找到该消息关联的处理函数,并调用执行,以实现消息发生点与消息处理函数的解耦。
107.在具体实现中,当第三方程序运行时,通过从上述命名空间加载每个元素名称对应的元素时,可以通过自己的命名空间以及自己继承的命名空间中获取对应的元素;同时在元素间进行数据交互时,可以通过自己的消息处理映射注册表中获取对应的处理函数,也可以在继承的消息处理映射注册表中获取对应的处理函数。
108.步骤s040:调用所述关联元素中的数据处理函数,并将数据处理结果返回至所述客户端,以完成所述访问请求的响应。
109.本实施例中,通过基于从客户端获取到的第三方程序的访问请求,加载其对应的入口元素;获取上述入口元素的元素引用关系,并基于其对应的引用元素名称,加载上述引用元素名称对应的业务元素;基于上述业务元素对应的业务处理逻辑,获取其对应的预设消息注册表中关联元素;调用上述关联元素中的数据处理函数,并将数据处理结果返回至上述客户端,以完成上述访问请求的响应。本发明基于元素名称加载其对应的业务元素,并通过业务元素的业务处理逻辑获取预设消息注册表中的关联元素,通过调用关联元素中的数据处理函数,完成访问请求的响应,从而实现第三方程序的加载,大大简化了第三方程序各个模块元素之间的引用以及函数调用,进而进一步的降低了软件开发的复杂度以及提高了软件开发的效率。
110.在一种可能的实施方式中,所述基于从客户端获取到的第三方程序的访问请求,加载其对应的入口元素的步骤之前,还包括:
111.步骤s001:基于用户输入的第三方程序的构建指令,创建所述构建指令对应的命名空间,并在所述命名空间内构建基类元素和消息注册表。
112.可以理解的是,上述基类元素组合即可完成上述第三方程序页面的构建,上述页面还可以包括入口页面和业务页面。其中,入口页面是应用程序的入口,使用者通过入口页面进入应用程序,入口页面通过业务页面的名称和标题,把业务页面的标题组织和显示出来,使用者通过点击入口页面上的业务页面的入口标题使用业务页面。上述业务页面,也可以是作为其他业务页面的入口页面,把其他的业务页面组织和呈现出来,具体的,入口页面只需要基于业务页面的名称信息就可以动态的呈现和打开业务页面,从而可以在不修改和编译入口页面的情况下动态的增删改业务页面。
113.进一步的,上述基类元素的类型可以是由组件元素、数据类型元素以及数据模型元素组成,还包括消息与处理函数关联关系实现元素间的数据交互。
114.在具体实现中,上述页面的实现步骤为:基于数据类型来创建数据变量,给组件关联或绑定特定的数据变量;组件根据特定的数据变量来显示ui或者对数据变量进行操作来改变数据变量;通过在上述框架系统中注册组件的消息和消息处理函数的关联关系,使得当组件发出消息时,其所关联的消息处理函数被运行框架调用执行,在消息处理函数中,可以修改本组件以及其他组件所绑定的数据变量,从而做到:在不修改组件内部代码的情况下,实现组件之间的相互调用和相互数据传递;数据类型包括基础数据类型和数据模型,基础数据类型包括基础的数字、文本、时间等,数据模型是用基础数据类型构造而来的复合数据类型,数据模型具备持久化能力,具备数据增删改查能力。
115.进一步的,所述组件元素用于提供数据变量入口,根据输入的数据变量来动态进行数据展示和提供数据操作方式,并通过所述组件元素内部的消息处理函数与其他组件元素建立关联关系。
116.可以理解的是,上述组件元素被设计为通用部件元素,通过暴露数据变量的方式与外部进行数据交互,组件内部根据数据变量的数据模型和数据值来动态决定其显示数据的形式和内容、操作数据的方式,外部可以引用和操作数据变量,实现与组件的数据交互。
117.应理解的是,上述组件元素还包含可视化配置界面,用于在图形化的页面开发工具中针对相应的组件实例配置数据。
118.还可以理解的是,上述组件元素通过暴露其运行过程中可发出的消息列表的方式
与外部元素进行行为交互,外部可以用消息处理函数与组件的消息建立关联关系,当组件内部的消息发生时,从该关联关系表中找到所述的消息处理函数并调用,以此实现组件与外部的行为交互。
119.还应理解的是,上述组件元素暴露了其可以被调用的函数,供外部调用其功能。
120.进一步的,所述数据类型元素,用于提供数据变量的参数配置,以使所述数据变量根据所述参数配置进行逻辑处理。
121.可以理解的是,上述数据类型元素可以包含配置方法和可视化配置界面,用于对数据变量的各项配置进行配置,数据变量根据这些配置来运行相应的逻辑;其中,包括从所生成的数据变量中读取数据的方法,还包括往所生成的数据变量中写数据的方法。
122.进一步的,所述数据模型元素,用于提供数据计算和处理函数自定义界面以及消息自定义界面,并通过接收外部消息以自定义的数据计算和处理函数来访问和操作数据库中的数据。
123.可以理解的是,上述数据模型元素可以是用基础数据类型构造而来的复合数据类型,其可以自定义数据计算和处理函数;还可以自定义消息,通过触发消息的方式调用外部函数;支持跨网络调用,即在服务器端定义的数据模型,可以在客户端元素中引用/调用,可以跨网络的通过调用数据模型的数据增删改查和其他数据计算和处理函数来访问和操作数据库的表数据。
124.在具体实现中,开发者开发第三方程序时,涉及到开发第三方程序的各类组成元素:页面、组件、数据类型的开发;其中,数据类型包括基础数据类型和由基础数据类型构建而来的复合数据类型(数据模型)。其中,页面和数据模型是第三方程序中业务模块开发的中心,业务模块即是由组件和技术数据模型来开发的,组件和基础数据类型属于通用部件。为了简化业务模块的开发,即简化页面和数据模型的开发,本实施例中,预设提供大量常用组件和基础数据类型,简化了业务模块的开发。同时,因为开发业务模块(页面和数据模型)所需要的组件元素和数据类型元素以及消息映射关系的构建,都易于图形化表达和操作,本实施还可以提供一种图形化的页面设计器和数据模型设计器,可以通过图形化界面的设计操作来生成页面和数据模型的程序代码,从而更进一步的简化业务模块的开发。
125.本实施例中,上述框架系统提供了一种更加简单但是更灵活的应用程序架构模式、开发模式和运行框架,使得应用程序开发者基于一套高重用度的框架和高重用度的通用部件基础下开发自己的业务功能,大大简化整体系统架构设计和业务功能的开发。并且,基于本发明方案,开发者可以进一步的开发出高复用度的通用部件,大大提升了组件、模型、模板这种大颗粒度级别的程序包的标准化和复用率,从而大大降低了软件开发的复杂度和提高软件开发的效率。
126.在一种可能的实施例方式中,本实施例提供的应用程序构建方法还可以是基于本实施例提供的用于构建第三方程序的框架系统实现的,系统包括:主体构建模块、主体内部构建模块和入口构建模块;所述主体构建模块,用于提供应用程序构建时需要的多个元素,并根据用户的操作指令将对应的元素进行组合,得到第三方程序主体;所述主体内部构建模块,用于基于名称加载的方式动态将所述第三方程序主体中的多个元素建立引用和/或使用关系,并基于消息与消息处理函数关联关系构建所述多个元素间的调用关系;所述入口构建模块,用于为所述第三方程序主体指定程序入口元素,并提供外部访问入口。
127.在具体实现中,本实施例提供的框架系统在加载和运行上述第三方程序(也即是目标应用程序)时,其运行步骤如下:
128.步骤s1:目标应用程序中指定了入口元素,本实施提供的框架系统加载和运行入口元素;
129.步骤s2:入口元素引用了其他元素,从而触发其他元素的加载和运行;
130.步骤s3:元素与元素之间相互调用交互和数据传递,从而触发整个目标应用程序的运行。
131.需要说明的是,在上述框架系统在开发者实现目标应用程序时,会为每一个目标应用程序建立一个程序资源库,当上述目标应用程序运行时,上述框架系统会加载其入口元素以及其他的元素,当上述框架系统在加载一个元素时,可以是根据元素的名称去目标应用程序的程序资源库中找到上述元素的具体实现并对其进行加载,因此,目标应用程序的元素可以动态的修改和添加到目标应用程序中,且目标应用程序整体不需要重新编译和发布。
132.可以理解的是,在上述目标应用程序构建时,当一个元素要引用另外一个元素时,前者是通过上述框架系统根据后者的名字动态加载引用到后者,元素在引用到其他元素后,即可直接调用对方的函数。从而实现了元素之间充分解耦,在调用时前者可以根据数据和逻辑情况来动态的决定引用其需要的元素,而不是在编译时就需要确定具体引用的元素,并且被引用的元素的修改和替换都不会影响引用它的元素,引用它的元素不需要修改和重新编译。
133.应理解的是,在上述目标应用程序构建时,当两个已经发布的元素之间需要相互调用时,可以是通过把一个元素的消息事件与另一个元素的函数一起注册到上述框架系统的消息处理注册表中,从而建立上述消息与上述函数的关联关系,当消息事件被触发时,上述框架系统即会来触发上述消息事件关联的处理函数,继而不需要修改和编译上述两个已经发布的元素,就可以实现元素间的相互调用。
134.本发明提供应用程序构建时需要的多个元素,通过元素进行组合得到第三方程序主体,并基于名称加载的方式动态完成元素间的引用和/或使用关系构建,基于消息与消息处理函数关联关系构建多个元素间的调用关系,并为第三方程序制定程序入口元素,从而为用户提供了一种更加简单但是更灵活的应用程序架构模式、开发模式和运行框架,使得应用程序开发者基于一套高重用度的框架和高重用度的通用部件基础下开发自己的业务功能,大大简化整体系统架构设计和业务功能的开发。并且开发者可以进一步的开发出高复用度的通用部件,持续简化业务功能模块的开发。并且,本发明提供的方法,使得应用程序的各个部分可以充分解耦,各个模块独立修改、独立发布,以及发布后免部署,大大提高系统更新、升级、发布维护的效率。并且可以方便的直接使用其他独立应用程序已有功能,并保持同步更新升级。很好的解决了软件的标准化和个性化的矛盾,大大提高了软件开发效率,大大的促进数字化系统的低成本开发和普及。
135.在一种可能的实施例方式中,所述入口构建模块,还用于在所述程序入口元素中引用至少一个所述第三方程序主体中的非程序入口元素,以使所述非程序入口元素在所述程序入口元素运行时同步加载。
136.可以理解的是,上述需要与入口元素同步加载的非程序入口元素通常可以是指在
进入程序主体界面前显示的广告,或者是用户在进入程序主体界面前的重要通告消息等,还可以是上述第三程序通过其他专用的账号登录系统关联登录时在上述第三程序的入口元素中同步加载上述账号登录系统的页面对应的元素,本实施例对此不作限制。
137.本实施例中,通过为第三方程序提供与外部系统间同步加载的能力,从而进一步的提升了第三方程序的健壮性,避免第三方程序开发出来后的数据孤岛危机。
138.在一种可能的实施例方式中,所述系统还包括:元素存储仓库,所述元素存储仓库,用于将所述系统中的全部元素进行存储。
139.可以理解的是,上述元素存储仓库中存储有第三方系统开发需要的全部元素,在第三方系统开发时仅仅需要引用或者实例化其中具体某一部分元素即可,从而使得当需要发布应用程序时,只需要发布到对应的仓库服务器即可,而不需要发布到运行服务器。
140.在第三方程序运行时,上述框架系统通过第三方程序的入口对外提供访问服务,上述入口还可以是第三方程序对应的识别字,用于对上述框架系统提供应用程序识别,上述框架系统根据第三方程序的识别字,获取上述第三方程序的描述信息,并从中得到上述第三方程序的入口页面名称,再根据上述入口页面名称加载和运行入口页面。当上述入口页面动态引用了其他业务功能页面时,业务功能页面动态加载其所引用到的组件及其数据变量对应的数据类型。组件显示数据变量的数据、响应使用者的操作、操作数据变量中的数据,并触发消息处理函数,进一步修改其他数据变量的读取和写入,以及触发其他组件的进一步操作。当操作数据变量时,触发数据模型的对数据库中数据表的数据访问和操作。开发者新增或者修改应用程序中的元素后,发布到资源仓库,运行框架在运行时根据名称自动加载最新版本的元素。
141.本实施例中,通过上述框架系统加载和运行上述第三方程序中的元素、为元素的运行和协作提供运行机制、封装元素运行所需要的复杂环境,使得各个元素可以独立开发、独立发布,大大降低了第三方应用程序的修改升级部署等开发和运维成本,从而改变了当前主流的开发和运维模式,因为一个应用系统中的程序文件直接(代码级程序)耦合了其所调用的程序文件,进而避免了导致整个应用系统的所有的程序文件须整体捆绑在一起发布,这个导致应用程序的修改升级和部署变得笨重、困难、成本高的问题。
142.在一种可能的实施例方式中,所述系统还包括:命名空间构建模块;所述命名空间构建模块,用于为每一个应用程序构建一个对应的命名空间,并为每个命名空间提供继承参数配置,以使所述第三方程序运行时通过其对应的命名空间和/或继承的命名空间中加载对应的元素。
143.可以理解的是,上述框架系统为每一个第三方应用程序创建了一个命名空间,当在运行时通过从框架系统中加载一个名称对应的元素时,首先在元素所在的应用程序的命名空间中寻找,如果找不到,就去该应用程序所继承的应用程序中寻找,以此实现应用程序的继承特性。
144.应理解的是,上述框架系统还可以为每一个第三方应用程序创建一个消息处理映射注册表,当元素发生消息事件时,从消息处理映射注册表中找到该消息关联的处理函数,并调用执行,以此实现消息发生点与消息处理函数的解耦。
145.在具体实现中,当第三方程序运行时,通过从上述框架系统中加载每个元素名称对应的元素时,可以通过自己的命名空间以及自己继承的命名空间中获取对应的元素;同
时在元素间进行数据交互时,可以通过自己的消息处理映射注册表中获取对应的处理函数,也可以在继承的消息处理映射注册表中获取对应的处理函数。
146.本实施例中,传统的系统开发中,一个应用程序不能直接方便的基于已有的应用程序来开发,这使得两个有很多重合功能的应用软件,必须各自独立开发、独立发布、独立运行,并且,两个应用程序中重合部分的发生更新时,需要在两个应用程序中都进行修改、编译、发布,这导致大量的重复开发,人力浪费。而本实施例,可以基于继承已有的应用程序的方式开发目标应用程序,通过继承已有应用程序的部分元素和改写所继承的应用程序的部分元素的方式来构建一个新的目标应用程序,使得软件系统的标品开发和定制开发得以完美兼顾,很好的解决基于标准化系统进行个性化定制开发的矛盾,使得标准化系统的开发能自动同步反应到定制化过的系统之中,定制化过的系统不会影响到标准化系统中,大大降低标准化和定制化并存的应用系统的开发和维护的成本。
147.在一种可能的实施例方式中,本实施例提供的框架系统可以是分布式协同运行的,包括服务端和客户端。运行框架可以分布式的加载和运行目标应用程序。运行在运行框架之上的应用程序元素,也分为服务器端元素和客户端元素。运行框架中的命名空间、消息处理注册表,都是通过http连接和socket连接全系统连通的,使得分布式运行在不同运算节点上的元素都能相互引用/调用。具体表现在,客户端元素,可以通过(1)动态引用元素和(2)注册消息关联关系两种方式引用/调用服务器端元素。服务器端元素,可以通过注册消息关联关系的方式调用客户端元素。
148.在一种可能的实施例方式中,本实施例还提供一种gui图形化的页面编写方法,其实现步骤如下:
149.步骤s11:从应用程序的程序资源包中,找到所有组件类元素,并图形化显示出来;
150.步骤s12:开发者基于图形界面选择一个组件元素,生成创建组件实例的代码;
151.步骤s13:从应用程序的程序资源包中,找到所有数据类型元素,并图形化显示出来;
152.步骤s14:开发者基于图形界面选择一个数据类型,生成创建数据变量并把数据变量与组件实例进行关联绑定的代码;
153.步骤s15:基于绑定的数据变量,图形化显示组件实例和数据变量的配置界面,配置组件使用数据变量的选项,生成设置组件实例和数据变量的配置项的代码;
154.步骤s16:图形化显示组件的所有可发出的消息,以及其他组件的可调用函数;
155.步骤s17:开发者选择一个组件实例的消息和一个组件实例的可调用函数,创建一个关联关系,以此生成在运行框架中注册组件的消息和消息处理函数的关联关系的代码;
156.步骤s18:基于上述的消息函数关联关系,图形化的创建变量赋值语句,以此生成读取和修改组件所绑定的数据变量的代码。其中,图形化的创建变量赋值语句,包括:(1)图形化显示本页面范围内可用的所有元素及其写数据函数;(2)开发者选择一个元素及其写数据函数,作为赋值语句中接收数据的左值;(3)图形化显示本页面范围内可用的所有元素及其读数据函数;(4)开发者选择一个元素及其读数据函数,作为赋值语句中提供数据的右值;
157.步骤s19:保存上述步骤生成的代码,即得到一个页面元素的代码。
158.在当前主流的业务模块开发模式中,仍然是基于编程语言,这导致开发者即便很
了解业务模块的设计方案、设计逻辑,也还需要很了解编程语言的语法和语言特性才能开发业务功能,这导致低效。而本实施例中,提供了一种gui图形化的页面编写方法,可以不用熟练掌握编程语言的语法和语言特性,即可不用记住各种编程语言的语法的情况下,就可以基于可视化图形化的界面操作进行业务模块的开发,大大降低了开发的难度和出错概率,大大降低应用系统的开发者的技术门槛,提高了开发效率。
159.在一种可能的应用场景中,目前主流的编程框架和架构设计方法,存在如下几个问题:
160.(一)编程框架更多聚焦于屏蔽系统技术层面的复杂度,让开发者更聚焦于自身业务模块的开发,但是实践中,业务模块的开发中仍然存在大量的范式重复的技术细节开发,仍然需要大量的编程工作以及编程技术知识,工作量大,难度高。究其根本原因,还是开发框架和通用部件的重用度低、使用难度高,业务模块开发时,仍然需要开发者自己投入大量工作在进行系统架构设计和复用已有部件。
161.(二)在程序文件中直接调用或引用要用到的其他程序文件。这种方式导致一个程序文件直接(代码级程序)耦合了其所调用的程序文件,从而导致整个应用系统的所有的程序文件须整体捆绑在一起发布,这个导致应用程序的修改变得笨重、困难、高成本。
162.(三)一个应用程序不能直接方便的基于已有的应用程序来开发,这使得两个有很多重合功能的应用软件,必须各自独立开发、独立发布、独立运行,并且,两个应用程序中重合部分的发生更新时,需要在两个应用程序中都进行修改、编译、发布,这导致大量的重复开发,人力浪费。在实践中,这种现象更多发生在一款面向企业用户的应用系统的标准化和定制化之间的矛盾困局中。当一个软件开发商开发了一款面向企业用户的软件产品后交付给不同的企业客户使用时,往往有70%的功能是每个客户的需求是一致的,但是还有30%的功能是各个客户都不一样的。这导致软件开发商陷入一个困局中:为每个客户开发一个版本,还是基于一个版本把每个客户的需求都进行实现?前者会导致巨大的开发和维护成本,后者会导致产品变得异常臃肿和难以使用。
163.为了进一步降低上述问题带来的负面影响,本实施提供了一种用于构建第三方程序的框架系统和程序构建方法,参见图2,图2为本发明提供的一种可能的应用场景示意图;在图2中,运行框架即为本实施例提供的用于构建第三方程序的框架系统,其通过按名称加载元素以及按消息触发调用元素的函数,从而运行第三方程序中的入口页面,以及入口页面中的关联页面、组件数据模型,再通过元素名称来引用其他的元素,以及通过元素基于运行框架中的消息注册表来触发调用其他元素的函数,最终实现第三方程序的运行。
164.其中,上述框架系统可以包括:前端框架系统和后端框架系统,前端框架系统可以是在各类浏览器中加载和运行基于现有应用开发规范开发出来的前端app,后端框架系统可以是对接各类webserver(django、flask等),通过加载和运行基于现有应用开发规范的后端app来响应外部api请求,其具体结构参见图3,图3为本发明提供的框架系统详细结构示意图;其具体的运行过程参见图4,图4为本发明提供的框架系统运行流程示意图。
165.可以理解的是,上述app代表了一个应用系统,包含了需要开发者自己定义、设计、开发的所有元素,所有这些元素都放在一个目录,应用运行框架可以加载该目录并按其中所定义的各种元素来运行。一个app可以继承其他app,以复用其他app已有的元素(数据、功能等)。
166.上述app的基本组成为:前端app、后端app。前端app最基本的组成是自定义的pages,后端app最基本的组成是自定义的各种services/数据模型。
167.上述app的内容为:通过创建一个文件夹,并在文件夹中创建特定的文件和子文件夹的方式来定义该app所具备的【数据】和【程序】。app的数据成员,可以作为对象实例使用。app的程序成员,可以作为class来使用,往往用于new出一个对象实例。其中,
168.app.json:在该文件中定义app的数据对象成员以及引用的外部程序。
169.pages:在该子目录中定义app的前端【页面】程序。
170.components:在该子目录中定义app的前端【组件】程序。
171.frontendvariabletypes:在该子目录中定义app的前端【数据类型】程序。
172.services/models:在该子目录中定义app的后端【服务/数据模型】程序。
173.backendvariabletypes:在该子目录中定义app的后端【数据类型】程序。
174.app.json文件包含如下内容:
175.version
176.appname
177.extendapps:
178.{"appname":"abcapp","huburl":"http://hub.xxx.app/abccapp",certifytoken="xxxxxxxxxxxxxxxx"}
179.title
180.desc
181.accessentries
182.userpools
183.dbserver
184.srunservers
185.bizservice:{name:"bs1","appname":"aaa","servicename":"sss","runserver":"servername"}
186.调用app中元素:在myapp自身的代码中、以及任何调用myapp的其他任意代码中,都可以通过如下方式调用myapp中定义的元素。
187.app=newapp("myapp");
188.app.newpage("pagename");
189.app.newcomponent("componentname");
190.app.newservice("servicename")//自己的(含继承的)
191.serviceapp.getservice("servicename");
192.本实施例中,通过实现一个具体的第三方程序的构建,从而清楚的说明了本实施例提供的用于构建第三方程序的框架系统在构建第三方程序的步骤,从而进一步降低了主流框架系统中用于开发第三方程序的问题,大大简化了整个系统架构设计和业务功能开发,降低了软件开发的复杂度和提高了软件开发的效率。
193.请参阅图5,图5为本发明实施例提供的一种应用系统构建和运行装置结构图示意图,如图5所示,一种应用系统构建和运行装置,包括目录创建模块100、元素创建模块200、文件配置模块300和构建及运行模块400,其中:
194.目录创建模块100,用于获取开发者输入的应用系统名称,基于所述应用系统名称,创建应用系统的代码文件存放的应用目录;元素创建模块200,用于在所述应用目录中创建元素及其对应的元素代码;所述元素包括基础数据类型、复合数据类型,所述复合数据类型基于元素名称引用其他元素并调用其他元素的函数;文件配置模块300,用于在所述应用目录中,创建所述应用系统的配置文件,并在所述配置文件中配置所述应用系统继承或引用的父应用和所述应用系统需要使用的资源,所述资源包括数据库;构建及运行模块400,用于将所述应用目录保存至应用代码仓库中,完成所述应用系统的构建,并通过预设的运行框架程序加载运行所述的应用系统。
195.可以理解的是,本发明提供的一种应用系统构建和运行装置与前述各实施例提供的应用系统构建和运行方法相对应,应用系统构建和运行装置的相关技术特征可参考应用系统构建和运行方法的相关技术特征,在此不再赘述。
196.尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
197.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1