一种使用json数据生成软件系统控件交互逻辑的方法与流程

专利2024-12-28  19

1.本发明涉及计算机软件开发领域,特别涉及一种使用json数据生成软件系统控件交互逻辑的方法。
背景技术
::2.在各类采用软件开发技术编写的信息管理软件系统中,需要编写大量相似性较高的界面与业务交互逻辑。3.传统的解决问题方法主要有以下:4.第一,采用各类编码语言进行直接编写,可以灵活运用到各种现有编程语言和工具的特性进行完全的定制化开发。缺点是人工耗时较高,即使面对比较相似的功能或业务类型也需要招聘研发人员进行花费大量的时间进行系统编写和研发工作。5.第二,低代码平台或针对相似业务功能定制进行组件化开发,可以减少研发人工的投入,但是通常这种方式只能针对比较简单的业务类型或者是标准化程度很高的业务场景。6.为了解决上述问题,现有技术中存在一种使用动态语言描述并生成控件的交互逻辑,其原理是将一段动态语言的代码片段编译之后执行。7.这种产品的缺点:8.使用此方法必须要求使用者具备很强的软件it经验和知识;9.此类方法一般使用指定的编程语言编写,业务逻辑只能面向特定的编程语言无法在不同平台语言之间简单的迁移;10.使用此类方法在运行使用时才可能暴露软件代码的漏洞或错误,导致系统执行失败或崩溃。技术实现要素:11.为了解决上述技术问题,本发明中披露了一种使用json数据生成软件系统控件交互逻辑的方法,本发明的技术方案是这样实施的:12.一种使用json数据生成软件系统控件交互逻辑的方法,包括如下步骤,13.s1、使用json数据格式配置描述组件和界面;14.s2、使用json数据格式配置描述组件交互;15.s3、使用json数据配置描述业务逻辑;16.s4、验证、解析json配置;17.s5、业务、交互逻辑和界面的渲染。18.优选地,所述s1包括:19.s1.1、使用json数据结构描述界面元素的属性和结构关系;20.s1.2、使用type属性区分不同界面元素;21.s1.3、使用events描述一个界面元素可用的事件列表以及事件对应的参数;22.优选地,所述s2包括:23.s2.1、使用json格式定义控件对象要处理的事件;24.s2.2、使用json格式定义事件的参数以及变量;25.s2.3、在事件的json数据中设定事件可用的参数以及变量;26.s2.4、使用json格式定义事件的回调方法并且组成事件处理链;27.s2.5、使用json格式定义事件处理中的逻辑;28.优选地,所述s2.5包括:29.s2.5.1、使用json格式定义事件处理中的逻辑;30.s2.5.2、使用json格式定义布尔类型运算符;31.s2.5.3、使用json格式定义数值类型运算符;32.s2.5.4、使用json格式定义数组、字符串类型运算符;33.s2.5.5、使用json格式定义对象的求值运算。34.优选地,所述s2.5.5包括:35.s2.5.5.1、使用json格式定义提取对象属性运算符;36.s2.5.5.2、在json格式定义的运算符中使用表达式;37.优选地,所述s3包括:38.s3.1、采用json定义业务场景,并复用已有业务逻辑和场景。39.优选地,所述s4包括:40.s4.1、解析界面元素和交互逻辑的json数据;41.s4.2、事件处理时,通过json表达式解析得到相对应的结果。42.优选地,所述s5包括:43.s5.1、采用本方法的json数据和现有技术javascript/react开发的针对web端的渲染程序;44.s5.2、采用本方法的json数据和现有技术dart/flutter开发的针对web端的渲染程序;45.s5.3、采用本方法的json数据和现有技术taro开发的针对小程序端的渲染程序;46.本发明的优势如下:47.1、大量减少重复性的编码工作,针对相似的业务场景,可以通过复制已有配置然后简单修改之后发布为新的业务。不需要开发人员有很高的软件编码技术,而是只需要具备相关的业务常识就可以编写新的业务。48.2、可以最大程度复用已有的代码逻辑,而不是为每一个新业务开发一套的信息或新的组件。交互和业务逻辑以json而不是代码的形式保存可以比较容易地复制到新的程序或使用新的编程语言来实现已有的业务逻辑。49.3、减少使用动态语言编写的方式导致的各种运行时的错误以及崩溃状况。附图说明50.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一种实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。51.图1为界面元素和json数据对应关系图;52.图2为界面元素基本结构示例图;53.图3为界面元素的事件列表结构示例图;54.图4为事件逻辑json数据示例图;55.图5为事件处理链逻辑和流程说明图;56.图6为逻辑运算符结构示例图;57.图7为数值运算符结构示例图;58.图8为对象的求值运算符结构示例;59.图9为业务逻辑复用说明图;60.图10为渲染程序方法说明图;61.图11为实施例的方法总体流程简图。具体实施方式62.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。63.实施例64.在一种具体的实施例中,如图所示,一种使用json数据生成软件系统控件交互逻辑的方法,包括如下步骤,65.s1、使用json数据格式配置描述组件和界面;66.s1.1、使用json数据结构描述界面元素的属性和结构关系;67.s1.2、使用type属性区分不同界面元素;68.s1.3、使用events描述一个界面元素可用的事件列表以及事件对应的参数;69.由于json数据的结构特性,它天然地会将数据组织成为树形结构,这和我们在一般网站系统或手机软件中能看到的界面组织方式是相对一致的。一个典型的界面对应成json格式如图1所示。70.通常来说每个界面最外层的容器组件我们称之为根容器或者是顶层容器。它在json配置中展示形式就是根元素,如果有放置于父容器中的子容器或者子控件,则父容器会添加children属性,它的值等于一个包含了一个或多个子容器对象的数组。如果子容器还有子容器,那么它的children属性仍然具有一样的结构,这样无论多么复杂的布局方式和嵌套结构,我们都可以采用这样的配置结构来存储。71.如图2所示,一个json节点是界面元素的文本表达方式,界面元素是可以在界面编辑器中拖拽、操作并且设置属性的控件,它们本质上都是一致的,通过设置不同的类型来区别每个元素以及它们可用的字段属性。通常一个界面元素(或一个控件)会使用一个类似如下的属性配置文件来标识该控件可用的字段以及字段的取值类型,控件名称等属性,properties属性是该界面元素可用的所有属性的集合,除了示例所示的部分之外还可配置位置、大小、标题、颜色、文字、内外边距等其他控件可以支持的属性类型。72.每个界面元素的type属性标识了该元素的类型,解析器会依据类型来查找相对应的属性是否完整。本实施例规定了默认的可用type取值为container(容器)、dialog(弹窗)、table(表格)、form(表单)、button(按钮)、input(输入框)、select(下拉选择)、list(列表)、datepicker(日期)、text(文本展示)等,除此之外还可指定非系统默认的自定义类型。73.除了基本的属性配置之外,每一个界面元素还必须包含相对应的事件描述配置,一个典型的事件必须至少包含事件名、事件接受参数、事件返回参数。以dialog元素为例如下表所示:[0074][0075][0076]以json的数据格式来描述该界面元素如图3所示。[0077]s2、使用json数据格式配置描述组件交互;[0078]s2.1、使用json格式定义控件对象要处理的事件;[0079]s2.1.1、使用json格式定义ui事件;[0080]s2.1.2、使用json格式定义网络事件;[0081]s2.1.3、使用json格式定义动画事件。[0082]s2.1.4、使用json格式定义其他事件。[0083]s2.2、使用json格式定义事件的参数以及变量;[0084]s2.3、使用事件绑定配置将界面元素和事件绑定;[0085]s2.4、使用json格式定义事件的回调方法并且组成事件处理链;s2.4.1、定义事件的成功和失败回调事件;[0086]s2.4.2、使用json格式定义事件处理链;[0087]s2.5、使用json格式定义事件处理中的逻辑;[0088]s2.5.1、使用json格式定义事件处理中的逻辑;[0089]s2.5.2、使用json格式定义布尔类型运算符;[0090]s2.5.3、使用json格式定义数值类型运算符;[0091]s2.5.4、使用json格式定义数组、字符串类型运算符;[0092]s2.5.5、使用json格式定义对象的求值运算;[0093]s2.5.5.1、使用json格式定义提取对象属性运算符;[0094]s2.5.5.2、在json格式定义的运算符中使用表达式;[0095]每一个界面元素的json数据中都会有相对应的事件列表,该事件列表是一个界面元素可用的事件总和。为使该事件可以被正确解析和渲染还需要使用另外的json数据来设置如何执行事件以及控制事件的执行次序。这个用于描述组件交互的json数据主要有以下几部分:使用json格式定义控件对象要处理的事件、使用json格式定义界面元素和事件绑定、事件可用的参数以及变量、事件结束的回调处理、事件处理中的逻辑控制。[0096]处理事件指的是在界面中,由用户操作直接或间接触发的控件行为。它主要分为以下几种类型:[0097]ui事件:如加载、卸载、点击、移动、关闭、显示、隐藏、聚焦等;[0098]网络请求事件;[0099]动画事件:如颜色、尺寸、位置、旋转等属性的变化;[0100]其他事件:如系统磁盘、内存中储存的状态,通知消息等;[0101]其中ui事件必须是在步骤s1.3相对应的界面元素的json配置中规定并存在的事件,其他事件的类型也必须符合系统默认所设定的名称,如event-request表示网络请求事件、event-animation表示动画事件、event-storage表示修改系统或内存状态的事件、event-notify表示一个通知事件。[0102]在指定了确定的事件类型之后,还需要根据不同的事件类型为其设置相对应的参数变量。对于每一个事件,都有input、output两个属性,它们分别表示该事件处理方法的接受参数和返回参数,通常来说系统会默认指定接受参数。如果均不设置,则事件的自定义处理方法就不会使用额外的参数变量。[0103]完成了对事件的具体描述配置之后,还需要使用另外一段json数据将事件绑定配置将界面元素和事件绑定,这样的好处是使用者不需要编写重复的事件交互逻辑就可以将一个事件处理逻辑重复绑定给多个独立的界面元素,从而达到最大程度的复用能力。事件绑定的json对象type值为event-binding,它必须包含事件作用的界面元素对象名(element)、事件名(event),一个典型事件以及事件绑定的基本结构和规范如图4所示。[0104]一个事件可能会执行成功或是失败,通常情形下我们会为其指定成功或失败的回调事件。事件对象中的success和error属性可以分别为成功或者失败情况设置事件回掉,事件回调本身也是一个事件,所以它的结构和属性和一个普通事件一致,同样也必须指定type类型以及其他相关的属性。[0105]一个事件处理之后返回的output参数会自动作为后继处理事件的input参数,可以利用这种方式实现事件处理链。一个事件的触发以及相关事件链的处理过程如图5所示。[0106]每一个事件均有默认的逻辑处理方式,但是在现实应用场景中往往需要对很多情况、条件做一些相应的逻辑判断。在本实施例中,约定了一套json数据表达逻辑控制的方法,具体有以下几种:逻辑和布尔值的运算、数值的运算、数组的运算、字符串的运算、对象的求值运算。[0107]当一个事件需要判断是否可以被触发、或者在触发之后是否要继续进行下一个事件行为之前,可以通过插入一个逻辑布尔语句来做判断。比如,图6的语句表示length属性小于10并且name属性等于apple。这段语句中,有三个运算符分别为“and”、“《”和“==”。跟随运算符出现的[]中间的内容分别为运算符左侧和右侧的表达式,用逗号隔开。因为and也是一个运算操作符,所以{“《”}和{“==”}作为and操作符左右侧的表达式出现。[0108]其他可用的布尔运算符还有{“or”}、{“》”}、{“》=”}、{“《=”}、{“!=”}、{“!”}。[0109]数值运算符用于界面元素的显示或者其他情形下的赋值操作,比如逻辑运算符的左右两侧的表达式。以图7为例,这个语句返回size*2+size/2的值。[0110]可用的数值运算符还有:[0111]操作符操作符参数数量+2-2*2/2%2max2个及以上min2个及以上round1floor1ceil1[0112]数组运算符用于操作数组类型的数据,可用的数组运算符主要有:in,map,all,some,merge,reduce等。可用的字符串运算符主要有:in,concat,sub,upper,lower等。[0113]在很多场合可能需要对一个对象的整体或部分属性进行取值、赋值、转换等操作。以图8为例,这个语句会返回一个新的对象,它包含三个属性,value1等于当前。[0114]以上所有的运算符的操作的基础数据除了指定一些固定的数据之外,还可以从当前界面元素已有的属性值中获取,当然同时也可以为已有属性值赋值。下面列出一些固定的表达式含义和用法。[0115][0116][0117]s3、使用json数据配置描述业务逻辑;[0118]s3.1、采用json定义业务场景,并复用已有业务逻辑和场景。[0119]除了使用基本语法设置通用场景之外,在系统中更加普遍的使用方式是,设定一个标准的业务场景,包含了业务组件、界面元素以及事件处理逻辑等等。以图9为例,如何将一个选择用户的弹窗业务绑定到其他业务场景中。[0120]s4、验证、解析json配置;[0121]s4.1、解析界面元素和交互逻辑的json数据;[0122]s4.2、事件处理时,通过json表达式解析得到相对应的结果。[0123]因为界面元素以及交互逻辑以json格式的形式保存。解析器至少会接收并处理一个包含了界面元素json数据(s1中所述),元素逻辑json数据(s2中所述)以及业务逻辑json数据(s3中所述)的数据集合,它应含有不少于各1个的上述数据。所以对json数据的验证解析工作主要分为以下几步:[0124]验证json数据合法性;[0125]解析界面元素json数据,提取界面元素的属性列表以及事件列表放置于全局状态中以供使用时检索;[0126]解析交互逻辑的json数据,将其中涉及到的界面和事件提取出来并在全局状态中管理;[0127]将解析完毕的数据发送给渲染程序;[0128]当交互逻辑或某个事件被触发时,渲染程序根据s2步骤中相关的解析逻辑调用。[0129]通过json反序列化将配置内容转化为内存中的数据对象,验证器会使用ajvjsonschema对json数据做第一次校验,如果验证合法则可以继续使用该配置否则会视其为不合法数据抛出错误。第一步的验证结束之后,校验器还要进行进一步的数据完整性和有效性检查,第二步验证主要会对无意义的数据项做剔除,合并外部引入的配置项以及对需要解析编译的表达式做类型检查,第二步验证不会抛出导致整体程序退出的异常,而是抛弃掉不能使用的数据或将其置空。[0130]经过两步验证的数据会由解析器分析,数据对象将被按标准格式解析为格式化对象。从根对象开始,解析程序将会逐个遍历并转换,依据配置所约定的类型创建子对象,直到整个对象树全部遍历结束为止。通过配置项目的type属性,解析器会自动按照其已有规则进行相应数据转换和解析。主要有:[0131]布局控件的解析:布局控件会被创建成为containerschema对象,它必须包含子元素。[0132]表单控件的解析:表单控件会被创建称formschema对象,它必须包含不少于一个的字控件以及用于提交的方法和数据格式。[0133]表格控件的解析:表格控件的会被创建成tableschema对象,它必须包含数据来源(动态或静态的),不少于一个的表格列配置。[0134]在界面元素解析完成之后,解析程序还将继续对s2步骤中所有涉及到的相关交互逻辑解析。将每一个事件从根处理节点开始分析,并且生成事件调用链。[0135]解析完成的界面元素、交互逻辑数据发送给渲染程序。[0136]渲染程序将业务数据和用户操作行为发送给解析器,解析器对事件进行处理之后返回处理完毕的数据或结果。[0137]s5、业务、交互逻辑和界面的渲染[0138]s5.1、采用本方法的json数据和现有技术javascript/react开发的针对web端的渲染程序;[0139]s5.2、采用本方法的json数据和现有技术dart/flutter开发的针对web端的渲染程序;[0140]s5.3、采用本方法的json数据和现有技术taro开发的针对小程序端的渲染程序;[0141]针对不同的终端,根据其开发语言的不同会有相对应的渲染程序。渲染通常会集成具体平台可用的解析器,渲染程序的开发方式和传统的系统开发基本一致,本实施例中渲染程序全部使用现有的开发技术完成,比如使用javascript/react开发针对web网页程序的渲染程序,使用dart/flutter开发针对移动app程序的渲染程序,使用taro开发针对小程序的渲染程序。[0142]渲染程序所能展示的每一个界面元素或者控件都必须有一个与之配套的界面元素json。此外它还负责将用户操作的状态以及界面数据发送回解析器并对返回结果做及时的响应。[0143]渲染程序的工作流程如图10所示。[0144]从实现角度来看,控件的交互逻辑必须由相对应平台或程序的代码语言编写,之后通过编译或解释执行的方式用静态的json数据描述的难点在于,控件的事件处理必须通过代码处理,使用具体的编程语言来处理具体的业务。本实施例用一种将界面、交互逻辑、业务逻辑序列化存储的json格式,通过编辑工具修改存储的具体内容,内容可以以数据库方式或者文本方式存储。客户端程序使用相对应的解析方法解析已编辑好的json格式文本内容。使用解析完毕的内容生成包含了丰富界面和交互逻辑的程序界面用户使用。可让完全不掌握编程能力的人员完成一个新的控件以及逻辑编写。[0145]需要指出的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
技术特征:
1.一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,包括如下步骤,s1、使用json数据格式配置描述组件和界面;s2、使用json数据格式配置描述组件交互;s3、使用json数据配置描述业务逻辑;s4、验证、解析json配置;s5、业务、交互逻辑和界面的渲染。2.根据权利要求1所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s1包括:s1.1、使用json数据结构描述界面元素的属性和结构关系;s1.2、使用type属性区分不同界面元素;s1.3、使用events描述一个界面元素可用的事件列表以及事件对应的参数。3.根据权利要求1所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s2包括:s2.1、使用json格式定义控件对象要处理的事件;s2.2、使用json格式定义事件的参数以及变量;s2.3、在事件的json数据中设定事件可用的参数以及变量;s2.4、使用json格式定义事件的回调方法并且组成事件处理链;s2.5、使用json格式定义事件处理中的逻辑。4.根据权利要求3所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s2.5包括:s2.5.1、使用json格式定义事件处理中的逻辑;s2.5.2、使用json格式定义布尔类型运算符;s2.5.3、使用json格式定义数值类型运算符;s2.5.4、使用json格式定义数组、字符串类型运算符;s2.5.5、使用json格式定义对象的求值运算。5.根据权利要求4所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s2.5.5包括:s2.5.5.1、使用json格式定义提取对象属性运算符;s2.5.5.2、在json格式定义的运算符中使用表达式。6.根据权利要求3所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s3包括:s3.1、采用json定义业务场景,并复用已有业务逻辑和场景。7.根据权利要求3所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s4包括:s4.1、解析界面元素和交互逻辑的json数据;s4.2、事件处理时,通过json表达式解析得到相对应的结果。8.根据权利要求4所述的一种使用json数据生成软件系统控件交互逻辑的方法,其特征在于,所述s5包括:s5.1、采用本方法的json数据和现有技术javascript/react开发的针对web端的渲染
程序;s5.2、采用本方法的json数据和现有技术dart/flutter开发的针对web端的渲染程序;s5.3、采用本方法的json数据和现有技术taro开发的针对小程序端的渲染程序。

技术总结
本发明提供了一种使用json数据生成软件系统控件交互逻辑的方法,包括如下步骤,S1、使用json数据格式配置描述组件和界面;S2、使用json数据格式配置描述组件交互;S3、使用json数据配置描述业务逻辑;S4、验证、解析json配置;S5、目标客户端使用标准的接口数据格式渲染界面以及相关交互和业务逻辑。其中本发明的有益效果是:使用一个json格式的表达方法来书写控件的业务逻辑,经由适当的编辑工具辅助帮助完全不掌握编程能力的人员完成一个新的控件以及逻辑编写。件以及逻辑编写。件以及逻辑编写。


技术研发人员:孔令锴
受保护的技术使用者:上海羚数智能科技有限公司
技术研发日:2022.06.29
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-11217.html

最新回复(0)