一种数据处理方法和装置与流程

文档序号:23090031发布日期:2020-11-27 12:41阅读:125来源:国知局
一种数据处理方法和装置与流程

本申请涉及智慧城市技术领域,具体涉及一种数据处理方法和装置。



背景技术:

qt框架基于c++语言开发,可用于linux、windows系统下的基于c/s(client/server,客户端/服务器)架构的gui(graphicaluserinterface,图形用户界面)应用程序。一个gui应用程序常常由大量的窗体组成,例如登录窗体、用户管理窗体、角色管理窗体等。这些窗体上包括许多的控件,例如各类按钮、文本输入框、下拉列表框等。这些窗体或控件在用户触发点击、拖动、输入、提交等等交互动作时,qt框架均会发送信号(也可称为操作信号,即本申请中的原生操作信号),并触发和该信号绑定的槽方法进行业务逻辑处理后更新窗体所对应的图形用户界面。

因此,采用qt框架开发的gui应用程序,其界面相关的事件多依赖于qt框架本身提供的基于信号和槽方法的方式,这种方式下触发的信号直接与槽方法绑定。在gui控件较多时,大量的信号和其处理业务的槽方法间混杂在同一gui处理逻辑之中,当业务变化导致槽方法修改时,往往伴随信号绑定的槽方法的处理逻辑的调整和重测试,繁琐易错。



技术实现要素:

本申请实施例提供一种数据处理方法和装置,可增加gui应用程序的稳定性和可扩展性,提高调整操作消息所对应的业务逻辑的效率。

本申请实施例提供了一种数据处理方法,包括:

根据预设窗体基类生成图形用户界面窗体对象,所述预设窗体基类继承qt框架的窗体基类;

根据视图控制器基类生成所述窗体对象的视图控制器对象;

通过所述视图控制器对象绑定所述窗体对象的业务逻辑对象,并保存所述业务逻辑对象向所述视图控制器对象注册的所需的消息类型;

将绑定所述业务逻辑对象的所述视图控制器对象注入至所述窗体对象中;

通过所述窗体对象接收在所述窗体对象对应的图形用户界面上触发的原生操作信号;

根据所述原生操作信号生成操作消息;

通过所述窗体对象将所述操作消息添加至所述视图控制器对象;

根据所述操作消息的消息类型通过所述视图控制器对象确定匹配的目标业务逻辑对象,并通过所述目标业务逻辑对象处理所述操作消息。

本申请实施例还提供了一种数据处理装置,包括:

第一生成模块,用于根据预设窗体基类生成图形用户界面窗体对象,所述预设窗体基类继承qt窗体基类;

第二生成模块,用于根据视图控制器基类生成所述窗体对象的视图控制器对象;

绑定模块,用于通过所述视图控制器对象绑定所述窗体对象的业务逻辑对象,并保存所述业务逻辑对象向所述视图控制器对象注册的所需的消息类型;

注入模块,用于将绑定了所述业务逻辑对象的所述视图控制器对象注入至所述窗体对象中;

接收模块,用于通过所述窗体对象接收在所述窗体对象对应的图形用户界面上触发的原生操作信号;

第三生成模块,用于根据所述原生操作信号生成操作消息;

添加模块,用于通过所述窗体对象将所述操作消息添加至所述视图控制器对象;

消息处理模块,用于根据所述操作消息的消息类型通过所述视图控制器对象确定匹配的目标业务逻辑对象,并通过所述目标业务逻辑对象处理所述操作消息。

本申请实施例还提供了一种电子设备,所述电子设备包括:

一个或多个处理器;存储器;以及一个或多个计算机程序,其中所述处理器和所述存储器相连接,所述一个或多个计算机程序被存储于所述存储器中,并配置为由所述处理器执行上述所述的数据处理方法。

本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现上述任一种数据处理方法中的步骤。

本申请实施例通过新增预设窗体基类和视图控制器基类,其中,预设窗体基类继承qt框架的窗体基类,通过预设窗体基类生成窗体对象,通过视图控制器基类生成视图控制器对象,将视图控制器对象绑定窗体对象的业务逻辑对象,并保存业务逻辑对象所需的消息类型;将绑定业务逻辑对象的视图控制器对象注入至窗体对象中,如此,实现通过视图控制器对象关联窗体对象和业务逻辑对象;通过窗体对象接收在对应的图形用户界面上基于qt框架触发的原生操作信号,根据原生操作信号生成操作消息,通过窗体对象将操作消息添加至视图控制器对象,通过视图控制器对象根据操作消息的消息类型确定匹配的目标业务逻辑对象,并通过目标业务逻辑对象处理操作消息,如此,通过视图控制器对象接收操作消息,该操作消息由qt框架的原生操作信号生成,并通过视图控制器对象来确定匹配的目标业务逻辑对象来处理该操作消息,不再需要直接使用qt框架原生的信号槽机制把原生操作信号和对应的槽方法硬性捆绑,使得原生操作信号和业务逻辑处理对应的槽方法分离,实现了用户操作与业务逻辑处理的解耦,图形用户界面和用户操作的分离,图形用户界面与业务逻辑处理的分离,使得业务逻辑的修改不再影响窗体对象对应的图形用户界面的原生操作信号发送相关逻辑,增加了gui应用程序的稳定性和可扩展性,提高调整操作消息所对应的业务逻辑的效率,提高测试操作消息所对应的业务逻辑的效率。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的数据处理方法的场景示意图;

图2是本申请实施例提供的数据处理方法的流程示意图;

图3是本申请实施例提供的数据处理中整体关系的示意图;

图4是本申请实施例提供的数据处理中窗体对象的流程示意图;

图5是本申请实施例提供的数据处理中视图控制器对象的流程示意图;

图6是本申请实施例提供的数据处理方法的另一流程示意图;

图7是本申请实施例提供的数据处理装置的结构示意图;

图8是本申请实施例提供的电子设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例提供一种数据处理方法、装置、电子设备和存储介质。本申请实施例提供的任一种数据处理装置,可以集成在电子设备中。该电子设备包括但不限于智能手机、平板电脑、笔记本电脑、智能电视、智能机器人、个人计算机(pc,personalcomputer)、可穿戴设备、服务器计算机,等等。在电子设备中,存在利用qt框架或者类似qt框架开发的gui应用程序。

请参阅图1,是本申请实施例提供的数据处理方法的场景示意图。该数据处理方法应用于电子设备中,在电子设备中有gui应用程序。gui应用程序包括多个图形用户界面/gui界面/窗体,gui界面中又包括多个不同的控件。如在窗体1中包括多个文本输入框、下拉列表框、各类按钮等。

用户在窗体1中点击了按钮1,则电子设备中根据用户的点击操作生成原生操作信号,并根据原生操作信号生成操作消息,通过窗体1将操作消息添加至注入窗体1的视图控制器对象中,视图控制器对象中绑定有窗体1的业务逻辑对象,通过视图控制器对象根据操作消息的消息类型确定匹配的目标业务逻辑对象,并通过目标业务逻辑对象来处理该操作消息。需要注意的是,窗体1是通过预设窗体基类派生的,该预设窗体基类是自定义的窗体基类,该预设窗体基类继承qt框架的窗体基类。

其中,“继承”是面向对象软件技术当中的一个概念。如果一个类a继承自另一个类b,就把这个a称为b的子类/派生类,而把b称为a的父类/基类。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。

图2是本申请实施例提供的数据处理方法的流程示意图,该数据处理方法应用于电子设备中,该数据处理方法包括如下步骤:

101,根据预设窗体基类生成图形用户界面窗体对象,预设窗体基类继承qt框架的窗体基类。

在本申请实施例中,增加预设窗体基类,该预设窗体基类为自定义窗体基类,该预设窗体基类继承qt框架的窗体基类。qt框架的窗体基类相当于父类,预设窗体基类为qt框架的窗体基类的子类。因为该预设窗体基类继承qt框架的窗体基类,所以拥有qt框架的窗体基类的所有属性和方法,可实现qt框架的窗体基类所能实现的所有功能。因此,利用该预设窗体基类生成的窗体可继承基于qt框架的信号槽机制,如接收基于qt框架在窗体对应的图形用户界面上触发的原生操作信号等。此外,该预设窗体基类还可以设置qt框架的窗体基类所不能实现的属性和方法,以实现qt框架的窗体基类所不能完成的功能。

例如,在预设窗体基类中实现自定义公共槽方法,即新增公共槽方法,该公共槽方法可被qt框架传递过来的原生操作信号驱动,以来对接qt框架原生的信号槽机制。该公共槽方法接收原生操作信号,封装原生操作信号以得到操作消息,并将封装后的操作消息发送至注入的视图控制器对象。该操作消息中包括原生操作信号,还包括通过公共槽方法识别出的信号来源、触发原生操作信号的触发时间、信号类型等等信息。

例如,在预设窗体基类中新增将视图控制器对象注入至窗体对象的功能等。

根据预设窗体基类生成gui窗体对象,窗体对象如窗体1、窗体2、......、窗体n等。具体地,如登录窗体、角色管理窗体、用户管理窗体等。可理解地,窗体1、窗体2、......、窗体n继承预设窗体基类,窗体1、窗体2、......、窗体n为预设窗体基类的子类,预设窗体基类为窗体1、窗体2、......、窗体n的父类。由于窗体1、窗体2、......、窗体n继承预设窗体基类,或者也可理解为窗体1、窗体2、......、窗体n由预设窗体基类派生,因此窗体1、窗体2、......、窗体n可实现预设窗体基类所能实现的所有功能。

如图3所示,窗体1继承预设窗体基类,......,窗体n也继承预设窗体基类,预设窗体基类继承qt框架的窗体基类。

本申请实施例中,类和对象的关系是,对象是类的具体实例,类是对象的模板是对对象的抽象。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类用于创建具体对象。

102,根据视图控制器基类生成窗体对象的视图控制器对象。

在本申请实施例中,增加视图控制器基类,该视图控制器基类是一个全新的基类。该视图控制器基类中定义了消息缓存、业务对象定时器、业务逻辑注册库三个模块。其中,消息缓存用于存储窗体封装的基于qt框架的原生操作信号而生成的操作消息,业务对象定时器则用于同步操作消息和业务逻辑对象,业务逻辑注册库则存储了所有注册到视图控制器的业务逻辑对象以及其感兴趣/所需的消息类型。

根据视图控制器基类生成窗体对象的视图控制器对象。视图控制器对象如视图控制器1、视图控制器2、......、视图控制器n等。可以理解地,视图控制器1、视图控制器2、......、视图控制器n继承视图控制器基类,视图控制器1、视图控制器2、......、视图控制器n为视图控制器基类的子类,视图控制器基类为视图控制器1、视图控制器2、......、视图控制器n的父类。由于视图控制器1、视图控制器2、......、视图控制器n继承视图控制器基类,或者也可理解为视图控制器1、视图控制器2、......、视图控制器n由视图控制器基类派生,因此视图控制器1、视图控制器2、......、视图控制器n可实现视图控制器基类所能实现的所有功能。如所有视图控制器对象均包括消息缓存、业务对象定时器、业务逻辑注册库三个模块。另外,可以理解地,一个窗体对象对应一个视图控制器对象,如窗体1对应视图控制器1,窗体2对应视图控制器2,......、窗体n对应视图控制器n。

如图3所示,视图控制器1继承视图控制器基类,......,视图控制器n也继承视图控制器基类,窗体1与视图控制器1对应,......,窗体n与视图控制器n对应。

在gui应用程序初始化时,会生成窗体对象,也会同步生成窗体对象相关的视图控制器对象。

103,通过视图控制器对象绑定窗体对象的业务逻辑对象,并保存业务逻辑对象向视图控制器对象注册的所需的消息类型。

其中,业务逻辑对象继承业务逻辑基类,由业务逻辑基类派生,具体可参看窗体对象和视图控制器对象对应的描述,在此不再赘述。

业务逻辑对象如业务逻辑1、业务逻辑2、......、业务逻辑n。每个业务逻辑对象都完成至少一个具体功能,如某个业务逻辑对象实现对输入的用户名和密码进行验证的功能。

其中,一个窗体对象包括多个业务逻辑对象。如图3所示,窗体1中包括业务逻辑1、业务逻辑2、......、业务逻辑n,窗体n中包括业务逻辑1、业务逻辑2、......、业务逻辑n。

在gui应用程序初始化时,会初始化视图控制器对象和该控制器对象相关的业务逻辑对象,并将业务逻辑对象注册入视图控制器对象,每个业务逻辑对象均包括其感兴趣/所需的消息类型,或者也可以理解为,该窗体对象的业务逻辑对象向视图控制器对象进行注册,并同时注册业务逻辑对象感兴趣/所需的消息类型。注册的业务逻辑对象和其所需的消息类型都保存至业务逻辑注册库中,如此,在初始化视图控制器对象时,视图控制器对象会绑定该窗体对象相关的业务逻辑对象,并在业务逻辑对象注册库中保存业务逻辑对象,以及业务逻辑对象向视图控制器对象注册的所需的消息类型。

如图3所示,视图控制器1中注册有窗体1相对应的业务逻辑1、业务逻辑2、......、业务逻辑n以及业务逻辑1、业务逻辑2、......、业务逻辑n各自所需的消息类型;......;视图控制器n中注册有窗体n相对应的业务逻辑1、业务逻辑2、......、业务逻辑n,以及业务逻辑1、业务逻辑2、......、业务逻辑n各自所需的消息类型。

其中,消息类型包括信号来源和信号类型,其中,信号来源指的是原生操作信号来自哪里,如来自登录按钮控件、注册按钮控件、文本输入框、选择框等控件。信号类型包括原生操作信号中所涉及的登录、注册、验证、取消、选择等窗体对象中所涉及的所有类型。通过消息类型就可以知道原生操作信号来自于哪个控件,触发该原生操作信号具体要完成什么功能。在一些情况下,消息类型也可仅包括信号来源。

需要注意的是,在qt框架中,原生操作信号一般指的是用户在图形用户界面上的点击操作等触发的操作信号,该原生操作信号并不涉及具体是哪个控件的操作、也不涉及该点击操作的其他相关内容,仅仅只表达触发了一个点击操作而已。而本申请中根据原生操作信号生成的操作消息中至少包括消息类型,该消息类型在原生操作信号中并没有。

104,将绑定业务逻辑对象的视图控制器对象注入至窗体对象中。

具体地,通过窗体对象的构造方法将绑定业务逻辑对象的视图控制器对象注入至窗体对象中。例如,将绑定业务逻辑对象的视图控制器对象作为参数传递入窗体对象的构造方法中,以实现将视图控制器对象注入至窗体对象中。因为视图控制器对象绑定窗体对象的所有业务逻辑对象,将视图控制器对象注入至窗体对象中后,窗体对象即可按照所有业务逻辑对象的执行顺序执行对应的业务逻辑对象。

以上通过新增预设窗体基类和视图控制器基类,通过预设窗体基类生成窗体对象,通过视图控制器基类生成视图控制器对象,将视图控制器对象绑定窗体对象的业务逻辑对象,并保存业务逻辑对象所需的消息类型;将绑定业务逻辑对象的视图控制器对象注入至窗体对象中,如此,实现视图控制器对象关联窗体对象和业务逻辑对象,通过视图控制器对象将窗体对象接收的原生操作信号和业务逻辑对象进行分离。

105,通过窗体对象接收在窗体对象对应的图形用户界面上触发的原生操作信号。

即通过预设窗体基类派生的窗体对象接收在对应的图形用户界面上触发的原生操作信号,原生操作信号可以是操作窗体对象触发的,也可以是操作窗体对象中的各类控件触发的。由于预设窗体基类中包括公共槽方法,因此,根据预设窗体基类派生的窗体对象也继承了该公共槽方法,可以理解地,相当于在窗体对象中增加了公共槽方法,该公共槽方法由原生操作信号触发,来对接qt框架原生的信号槽机制。需要注意的是,现有的qt框架的信号槽机制中窗体对象并没有该公共槽方法。

具体地,通过窗体对象的公共槽方法接收在窗体对象对应的图形用户界面上触发的原生操作信号。

106,根据原生操作信号生成操作消息。

操作消息也由对应的消息父类派生而来,继承该消息父类的所有属性和方法,完成消息父类的所有功能。

在一些情况下,消息父类中加入消息类型和消息状态等属性。因此,操作消息中也会有对应的消息类型和消息状态等属性。可以理解地,在操作消息中加入对应的消息类型和消息状态等属性。

根据原生操作信号通过窗体对象的公共槽方法生成操作消息,具体地,包括:通过窗体对象的公共槽方法获取原生操作信号的信号来源以及触发原生操作信号的触发时间,将信号来源作为消息类型;设置消息状态为未完成状态;封装触发时间、消息类型、消息状态和原生操作信号,以生成操作消息。

信号来源指的是原生操作信号来自哪里,如信号来源为登录控件。将信号来源作为消息类型。在其他实施例中,信号类型还可以包括其他的内容。通过消息类型就可以知道原生操作信号是由哪个控件触发的。触发时间即为触发原生操作信号的触发时间,或者也可以理解为用户在窗体对象对应的图形用户界面上操作窗体对象或者对应窗体对象上的控件的操作时间等,触发时间以电子设备上的本地时间为准,如2020.3.2日18:32:22等。最后将触发时间、消息类型、消息状态和原生操作信号一起封装,以生成操作消息。

在一些情况下,消息父类中除了加入消息类型和消息状态等属性之外,还会加入共享数据和处理顺序标识等属性。如此,操作消息中除了会有对应的消息类型和消息状态等属性之外,还会有对应的共享数据和处理顺序标识等属性。可以理解地,在操作消息中加入对应的消息类型和消息状态、共享数据和处理顺序标识等属性。需要注意的是,消息类型和消息状态、共享数据和处理顺序标识等属性在原生操作信号中是没有的。

共享数据和处理顺序标识可用于一个原生操作信号可以被一个业务逻辑对象处理时的情况(便于后续对该原生操作信号的业务逻辑进行扩展,在该种情况下,可设置共享数据为空,设置处理顺序标识为预设的处理顺序标识等),也可以用于一个原生操作信号需要被多个业务逻辑对象处理时的情况。

本申请实施例以一个原生操作信号需要被多个业务逻辑对象处理为例进行说明。其中,共享数据指的是多个业务逻辑对象可相互共用的数据,如各业务逻辑对象的处理结果数据,可以理解地,上一个业务逻辑对象处理操作消息的处理结果,可作为下一个业务逻辑对象处理时所需的相关数据。处理顺序标识可以用序号来表示,如1、2等来表示。

根据原生操作信号通过窗体对象的公共槽方法生成操作消息,具体地,包括:通过窗体对象的公共槽方法获取原生操作信号的信号来源、触发原生操作信号的触发时间,将信号来源作为消息类型;获取多个业务逻辑对象处理的共享数据,设置原生操作信号的处理顺序标识;设置消息状态为未完成状态;封装触发时间、消息类型、消息状态、共享数据、处理顺序标识和原生操作信号,以生成操作消息。其中,设置原生操作信号的处理顺序标识为预设的处理顺序标识。如预设的处理顺序标识为0。其中,该预设的处理顺序标识可理解为初始处理顺序标识。

107,通过窗体对象将操作消息添加至视图控制器对象。

具体地,通过窗体对象的公共槽方法将操作消息添加至注入的视图控制器对象,具体地,添加至注入的视图控制器对象的消息缓存中。

如图4所示,窗体对象接收到原生操作信号后,触发原有的信号槽机制,窗体对象的公共槽方法对接该原有的信号槽机制,接收qt框架发送的原生操作信号,根据原生操作信号生成操作消息,并将操作消息添加至视图控制器对象,如此,完成原生操作信号与对应的槽方法(业务逻辑)之间的隔离。

108,根据操作消息的消息类型通过视图控制器对象确定匹配的目标业务逻辑对象,并通过目标业务逻辑对象处理操作消息。

其中,根据操作消息的消息类型通过视图控制器对象确定匹配的目标业务逻辑对象的步骤,包括:通过视图控制器对象的业务对象定时器从视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,并将消息状态为未处理状态的操作消息作为第一目标操作消息;获取第一目标操作消息的消息类型;从视图控制器对象的业务逻辑注册库中查询与消息类型匹配的业务逻辑对象,作为目标业务逻辑对象。如此,通过消息类型来实现消息缓存中的操作消息与业务逻辑注册库中的业务逻辑对象之间的匹配。

在一种情况下,当操作消息中除了包括消息类型之外,还包括处理顺序标识时,根据操作消息的消息类型通过视图控制器对象确定匹配的目标业务逻辑对象的步骤,包括:通过视图控制器对象的业务对象定时器从视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,并将消息状态为未处理状态的操作消息作为第一目标操作消息;获取所述第一目标操作消息的消息类型和处理顺序标识;从视图控制器对象的业务逻辑注册库中查询与消息类型和处理顺序标识一一匹配的业务逻辑对象,作为目标业务逻辑对象。如此,通过消息类型以及处理顺序标识来实现消息缓存中的操作消息与业务逻辑注册库中的业务逻辑对象之间的匹配。

可以理解地,每个业务逻辑对象中除了包括消息类型之外,还包括业务逻辑标识。按照具体业务逻辑对象的处理顺序来进行设置,如将某个操作消息对应的第一个逻辑对象的业务逻辑标识设置为0,将对应的下一个业务逻辑对象的业务逻辑标识设置为1,将再下一个业务逻辑对象的业务逻辑标识设置为2,......。

从视图控制器对象的业务逻辑注册库中查询与消息类型和处理顺序标识一一匹配的业务逻辑对象,作为目标业务逻辑对象的步骤,理解为:从视图控制器对象的业务逻辑注册库中查询消息类型与操作消息的消息类型匹配,且业务逻辑标识与操作消息的处理顺序标识匹配的业务逻辑对象,作为目标业务逻辑对象。

其中,视图控制器对象的消息缓存用来存储操作消息,另一方面可理解为,通过视图控制器的消息缓存可拦截该操作消息,再确定与该操作消息匹配的目标业务逻辑对象来处理该操作消息。而原生的信号槽机制中,当触发了原生操作信号后,就会立即调用对应的槽方法来执行,不能实现拦截原生操作信号。

如图5所示,当视图控制器对象的消息缓存中存在未处理状态的操作消息时,业务对象定时器取出操作消息,根据操作消息的消息类型和处理顺序标识从业务逻辑注册库中查询消息类型与操作消息的消息类型匹配,且业务逻辑标识与操作消息的处理顺序标识匹配的目标业务逻辑对象,通过目标业务逻辑对象处理该操作消息。

其中,通过目标业务逻辑对象处理操作消息,理解为通过目标业务逻辑对象使用该操作消息携带的信息进行逻辑处理。

若操作消息中包括消息类型,则通过匹配的目标业务逻辑对象根据该操作消息携带的信息进行逻辑处理之后,将处理结果封装至操作消息的共享数据中,并修改操作消息的消息状态为已完成,即确定操作消息被目标业务逻辑对象处理完成。

若操作消息中包括消息类型和处理顺序标识,通过目标业务逻辑对象处理操作消息的步骤,包括:通过目标业务逻辑对象根据所述操作消息中携带的信息进行逻辑处理之后,检测目标业务逻辑对象是否为该操作消息的最后一个业务逻辑对象;若不是,获取该目标业务逻辑对象处理所述操作消息的处理结果,通过该目标业务逻辑对象将处理结果封装至操作消息的共享数据中;将该操作消息的处理顺序标识自增1,以得到更新的操作消息;若目标业务逻辑对象为该操作消息的最后一个业务逻辑对象,获取该目标业务逻辑对象处理所述操作消息的处理结果,通过该目标业务逻辑对象将处理结果封装至操作消息的共享数据中,修改操作消息的消息状态为已完成。

得到更新的操作消息后,由于操作消息中的消息状态为未完成状态,则接着执行“通过所述视图控制器对象的业务对象定时器从所述视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,并将所述消息状态为未处理状态的操作消息作为第一目标操作消息”的步骤,直至确定操作消息被目标业务逻辑对象处理完成。

其中,操作消息的最后一个业务逻辑对象中会有对应的消息码标识,通过该消息码标识即可确定该操作消息已经处理完成,或者不再继续处理该操作消息。若在目标业务逻辑对象中未检测到该消息码标识,则确定目标业务逻辑对象不是操作消息的最后一个业务逻辑对象。

如图6所示,为本申请实施例提供的处理操作消息的示意图。例如,首先,将窗体对象的某一个原生操作信号所对应的槽方法中的业务逻辑分为几个粒度更小的业务逻辑来处理。如将窗体1上的登录控件的原生操作信号所对应的槽方法中的业务逻辑分为几个粒度更小的业务逻辑对象来处理,分为业务逻辑1(判断用户名和密码是否为空以及是否为特殊字符等)、业务逻辑2(验证用户名和密码,确定是否匹配)、业务逻辑3(登录信息是否完整)等三个业务逻辑,该三个业务逻辑分别设置业务逻辑标识,如分别为0,1,2。其中,该业务逻辑1、业务逻辑2、业务逻辑3的消息类型为aaa。

当触发登陆控件后,触发原生操作信号,窗体1的公共槽方法接收该原生操作信号,获取触发时间、消息类型(aaa)、共享数据(此时共享数据可能为空);设置处理顺序标识为0;设置消息状态为未处理状态;封装触发时间、消息类型、消息状态、共享数据、处理顺序标识和原生操作信号,以生成操作消息。通过公共槽方法将该操作消息添加至视图控制器对象的消息缓存中。

由于该操作消息的消息状态为未完成状态、消息类型为aaa、处理顺序标识为0,如此,通过视图控制器对象确定消息类型与操作消息的消息类型相同,且业务逻辑标识与操作消息的处理顺序标识相同的目标业务逻辑对象,即业务逻辑1。通过业务逻辑1处理后,得到处理结果1。由于业务逻辑1并非是该操作消息对应的最后一个业务逻辑,因此,通过业务逻辑1将处理结果1封装至操作消息的共享数据中;并将该操作消息的处理顺序标识自增1,得到处理顺序标识为1,如此,得到更新的操作消息。

根据更新的操作消息的消息状态为未完成状态、消息类型为aaa、处理顺序标识为1,确定消息类型与操作消息的消息类型相同,且业务逻辑标识与操作消息的处理顺序标识相同的目标业务逻辑对象,即业务逻辑2。通过业务逻辑2处理后,得到处理结果2。由于业务逻辑2并非是该操作消息对应的最后一个业务逻辑,因此,通过业务逻辑2将处理结果2封装至操作消息的共享数据中;并将该操作消息的处理顺序标识自增1,得到处理顺序标识为2,如此,得到更新的操作消息。

根据更新的操作消息的消息状态为未完成状态、消息类型为aaa、处理顺序标识为2,确定消息类型与操作消息的消息类型相同,且业务逻辑标识与操作消息的处理顺序标识相同的目标业务逻辑对象,即业务逻辑3。通过业务逻辑3处理后,得到处理结果3。通过业务逻辑3将处理结果3封装至操作消息的共享数据中,由于业务逻辑3中有对应的消息码标识,确定业务逻辑3为该操作消息的最后一个业务逻辑对象,修改更新后的操作消息的消息状态为已完成,不再继续处理该操作消息。

其中,该操作消息的共享数据中包括处理结果1、处理结果2和处理结果3。

需要注意的是,上述一个原生操作信号需要被多个业务逻辑对象处理的处理流程只是其中一个实施例,还可以是其他可以实现的流程。

可以理解地,现有的qt框架的技术中,一个原生操作信号被触发后,与该原生操作信号绑定的槽方法中会实现该原生操作信号所有的业务逻辑,无论该业务逻辑多么复杂。通过本申请实施例中的共享数据和处理顺序标识等,可以将原本很复杂的一个原生操作信号所对应的所有业务逻辑分为分别实现各自功能的几个业务逻辑来进行处理,以降低业务逻辑实现功能的粒度,增加业务逻辑的复用性,降低开发量,提高gui应用程序的开发效率。另一方面,当该原生操作信号需要增加一些处理逻辑时,通过本申请实施例中的共享数据和处理顺序标识等,可以很方便的将需要增加的一些处理逻辑作为一个业务逻辑对象加入,只需对该新增的业务逻辑对象增加一个处理顺序标识,并修改后续的业务逻辑对象的处理顺序标识即可。方便扩展,提高gui应用程序的开发效率。

本申请实施例在图形用户界面和业务逻辑处理的方法间引入视图控制器的中介者,通过视图控制器对象接收操作消息,该操作消息由qt框架的原生操作信号生成,并通过视图控制器对象来确定匹配的目标业务逻辑对象来处理该操作消息,不再需要直接使用qt框架原生的信号槽机制把原生操作信号和对应的槽方法硬性捆绑,使得原生操作信号和业务逻辑处理对应的槽方法分离,实现了用户操作与业务逻辑处理的解耦,图形用户界面和用户操作的分离,图形用户界面与业务逻辑处理的分离,使得业务逻辑的修改不再影响窗体对象对应的图形用户界面的原生操作信号发送相关逻辑,增加了gui应用程序的稳定性和可扩展性,提高调整操作消息所对应的业务逻辑的效率,提高测试操作消息所对应的业务逻辑的效率。另一方面,由于图形用户界面和业务逻辑处理实现了解耦,因此,即使业务逻辑出错,也不会导致图形用户界面崩溃,解决了因为业务逻辑的问题导致的图形用户界面崩溃的问题。可以理解地,现有技术中,由于原生操作信号和对应地槽方法进行绑定,该槽方法中实现了相关地业务逻辑,当业务逻辑出异常时,导致图形用户界面出现崩溃。

在一些情况下,所述数据处理方法,还包括:通过窗体对象的用户界面刷新定时器,从视图控制器对象的消息缓存中,获取消息状态为已完成状态的操作消息,作为第二目标操作消息;根据第二目标操作消息的处理结果,通过用户界面刷新定时器更新窗体对象对应的图形用户界面;在图形用户界面更新完成后,从消息缓存中移除第二目标操作消息。可以理解地,用户界面刷新定时器持续不断的从消息缓存中获取第二目标操作消息,以更新窗体对象对应的图形用户界面,从而保证窗体对象对应的图形用户界面实时保持最新状态。

在一些情况下,所述数据处理方法,还包括:通过视图控制器对象的业务对象定时器从视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,将消息状态为未处理状态的操作消息作为第三目标操作消息;获取第三目标操作消息的触发时间,以及获取当前时间;若当前时间和触发时间的时间差值大于预设时间,标记第三目标操作消息的消息状态为超时或者异常;在窗体对象对应的图形用户界面上,提示操作消息处理超时或者异常;在图形用户界面提示完成后,从消息缓存中移除第三目标操作消息。可以理解地,通过视图控制器对象的业务对象定时器检查操作消息的触发时间,对于超过预设时间未能处理的操作消息,标识为超时/异常,并在窗体对象对应的图形用户界面上,提示操作消息处理超时或者异常,以提示用户。

在一些情况下,当两个同步处理的业务逻辑对象相斥时,数据处理方法,还包括:在后一个执行的业务逻辑对象中,检测前一个执行的业务逻辑对象所处理的操作消息的消息状态是否为未完成状态;若是,则终止前一个执行的业务逻辑对象的处理,并设置前一个执行的业务逻辑对象所处理的操作消息的消息状态为终止状态;从消息缓存中移除消息状态为终止状态的操作消息。

其中,相斥指的是两个业务逻辑对象同步执行时可能会出现异常。前一个执行和后一个执行是按照执行时间顺序来确定的。如新增和查询,用户先点了窗体对象中的新增按钮,接着点了查询按钮,当新增的业务逻辑对象处理新增的业务逻辑时,查询的业务逻辑对象处理查询的业务逻辑有可能出异常;当查询的业务逻辑对象处理查询的业务逻辑时,新增的业务逻辑对象处理新增的业务逻辑也有可能出异常。原生的方法中解决不了这个问题。本申请实施例中,当在后一个执行的业务逻辑对象中,若检测到前一个执行的业务逻辑对象所处理的操作消息的消息状态为未完成状态,则终止前一个执行的业务逻辑对象的处理,并设置终止的业务逻辑对象所处理的操作消息的消息状态为终止状态。如此,通过终止对应业务逻辑对象的执行来解决现有技术中无法解决的问题。

根据上述实施例所描述的方法,本实施例将从数据处理装置的角度进一步进行描述,该数据处理装置具体可以作为独立的实体来实现,也可以集成在电子设备中来实现。

图7是本申请实施例提供的数据处理装置的结构示意图。该装置可以包括第一生成模块201、第二生成模块202、绑定模块203、注入模块204、接收模块205、第三生成模块206、添加模块207以及消息处理模块208。

第一生成模块201,用于根据预设窗体基类生成图形用户界面窗体对象,预设窗体基类继承qt窗体基类。

第二生成模块202,用于根据视图控制器基类生成窗体对象的视图控制器对象。

绑定模块203,用于通过视图控制器对象绑定窗体对象的业务逻辑对象,并保存业务逻辑对象向视图控制器对象注册的所需的消息类型。

注入模块204,用于将绑定了业务逻辑对象的视图控制器对象注入至窗体对象中。

通过窗体对象的构造方法将绑定业务逻辑对象的视图控制器对象注入至窗体对象中。例如,将绑定业务逻辑对象的视图控制器对象作为参数传递入窗体对象的构造方法中,以实现将视图控制器对象注入至窗体对象中。

接收模块205,用于通过窗体对象接收在窗体对象对应的图形用户界面上触发的原生操作信号。

通过窗体对象的公共槽方法接收在窗体对象对应的图形用户界面上触发的原生操作信号。

第三生成模块206,用于根据原生操作信号生成操作消息。

其中,第三生成模块206包括获取单元、设置单元和封装单元。其中,获取单元,用于通过窗体对象的公共槽方法获取原生操作信号的信号来源以及触发原生操作信号的触发时间,将信号来源作为消息类型。设置单元,用于设置消息状态为未完成状态。封装单元,用于封装触发时间、消息类型、消息状态和原生操作信号,以生成操作消息。

在一种情况下,获取单元,还用于获取多个业务逻辑对象处理的共享数据。设置单元,还用于设置原生操作信号的处理顺序标识。封装单元,还用于封装触发时间、消息类型、消息状态、共享数据、处理顺序标识和原生操作信号,以生成操作消息。

添加模块207,用于通过窗体对象将操作消息添加至视图控制器对象。

具体地,通过窗体对象的公共槽方法将操作消息添加至注入的视图控制器对象,具体地,添加至注入的视图控制器对象的消息缓存中。

消息处理模块208,用于根据操作消息的消息类型通过视图控制器对象确定匹配的目标业务逻辑对象,并通过目标业务逻辑对象处理操作消息。

其中,消息处理模块208包括确定单元和消息处理单元。确定单元,用于根据操作消息的消息类型通过视图控制器对象确定匹配的目标业务逻辑对象。消息处理单元,用于通过目标业务逻辑对象处理操作消息。

在一种情况下,确定单元,具体用于通过视图控制器对象的业务对象定时器从视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,并将消息状态为未处理状态的操作消息作为第一目标操作消息;获取第一目标操作消息的消息类型;从视图控制器对象的业务逻辑注册库中查询与消息类型匹配的业务逻辑对象,作为目标业务逻辑对象。

在一种情况下,确定单元,具体用于通过视图控制器对象的业务对象定时器从视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,并将消息状态为未处理状态的操作消息作为第一目标操作消息;获取第一目标操作消息的消息类型和处理顺序标识;从视图控制器对象的业务逻辑注册库中查询与消息类型和处理顺序标识一一匹配的业务逻辑对象,作为目标业务逻辑对象。

在一种情况下,消息处理单元,具体用于获取目标业务逻辑对象处理操作消息的处理结果;通过目标业务逻辑对象将处理结果封装至操作消息的共享数据中。

在一种情况下,消息处理单元,具体用于当目标业务逻辑对象不为操作消息的最后一个业务逻辑对象时,获取目标业务逻辑对象处理操作消息的处理结果;通过目标业务逻辑对象将处理结果封装至操作消息的共享数据中;将操作消息的处理顺序标识进行自增,如每次自增1,以得到更新的操作消息;当目标业务逻辑对象为操作消息的最后一个业务逻辑对象时,获取目标业务逻辑对象处理操作消息的处理结果;通过目标业务逻辑对象将处理结果封装至操作消息的共享数据中;修改操作消息的消息状态为已完成。

在一种情况下,所述数据处理装置,还包括:刷新处理模块。所述刷新处理模块,用于通过窗体对象的用户界面刷新定时器,从视图控制器对象的消息缓存中,获取消息状态为已完成状态的操作消息,作为第二目标操作消息;根据第二目标操作消息的处理结果,通过用户界面刷新定时器更新窗体对象对应的图形用户界面;在图形用户界面更新完成后,从消息缓存中移除第二目标操作消息。

在一种情况下,所述数据处理装置,还包括:异常处理模块。所述异常处理模块,用于通过视图控制器对象的业务对象定时器从视图控制器对象的消息缓存中获取消息状态为未处理状态的操作消息,将消息状态为未处理状态的操作消息作为第三目标操作消息;获取第三目标操作消息的触发时间,以及获取当前时间;若当前时间和触发时间的时间差值大于预设时间,标记第三目标操作消息的消息状态为超时或者异常;在窗体对象对应的图形用户界面上,提示操作消息处理超时或者异常;在图形用户界面提示完成后,从消息缓存中移除第三目标操作消息。

在一种情况下,所述数据处理装置,还包括:互斥处理模块。所述互斥处理模块,用于当两个同步处理的业务逻辑相斥时,在后一个执行的业务逻辑中,检测前一个执行的业务逻辑所处理的操作消息的消息状态是否为未完成状态;若是,则终止前一个执行的业务逻辑的处理,并设置前一个执行的业务逻辑所处理的操作消息的消息状态为终止状态;从消息缓存中移除消息状态为终止状态的操作消息。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现。以上装置和各单元的具体实现过程,以及所达到的有益效果,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。

本申请实施例还提供一种电子设备,如图8所示,其示出了本申请实施例所涉及的电子设备的结构示意图,具体来讲:

该电子设备可以包括一个或者一个以上处理核心的处理器901、一个或一个以上计算机可读存储介质的存储器902、射频(radiofrequency,rf)电路903、电源904、输入单元905、以及显示单元906等部件。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器901是该电子设备的控制中心。其中,处理器利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器902内的软件程序和/或模块,以及调用存储在存储器902内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器可包括一个或多个处理核心;优选的,处理器可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解地是,上述调制解调处理器也可以不集成到处理器中。

存储器902可用于存储软件程序(计算机程序)以及模块,处理器901通过运行存储在存储器902的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器902可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器902可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器902还可以包括存储器控制器,以提供处理器901对存储器902的访问。

rf电路903可用于收发信息过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器901处理;另外,将涉及上行的数据发送给基站。通常,rf电路903包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(sim)卡、收发信机、耦合器、低噪声放大器(lna,lownoiseamplifier)、双工器等。此外,rf电路903还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(gsm,globalsystemofmobilecommunication)、通用分组无线服务(gprs,generalpacketradioservice)、码分多址(cdma,codedivisionmultipleaccess)、宽带码分多址(wcdma,widebandcodedivisionmultipleaccess)、长期演进(lte,longtermevolution)、电子邮件、短消息服务(sms,shortmessagingservice)等。

电子设备还包括给各个部件供电的电源904(比如电池),优选的,电源904可以通过电源管理系统与处理器901逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源904还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该电子设备还可包括输入单元905,该输入单元905可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体地实施例中,输入单元905可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器901,并能接收处理器901发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元905还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。

该电子设备还可包括显示单元906,该显示单元906可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元906可包括显示面板,可选的,可以采用液晶显示器(lcd,liquidcrystaldisplay)、有机发光二极管(oled,organiclight-emittingdiode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器901以确定触摸事件的类型,随后处理器901根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图中,触敏表面与显示面板是作为两个独立的部件来实现输入和输出功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。

尽管未示出,电子设备还可以包括摄像头(需要注意的是,该处的摄像头与上述所述的虚拟相机不同,该处的摄像头指的是硬件)、蓝牙模块等,在此不再赘述。具体在本实施例中,电子设备中的处理器901会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器902中,并由处理器901来运行存储在存储器902中的应用程序,从而实现各种功能,如下:

根据预设窗体基类生成图形用户界面窗体对象,所述预设窗体基类继承qt框架的窗体基类;根据视图控制器基类生成所述窗体对象的视图控制器对象;通过所述视图控制器对象绑定所述窗体对象的业务逻辑对象,并保存所述业务逻辑对象向所述视图控制器对象注册的所需的消息类型;将绑定所述业务逻辑对象的所述视图控制器对象注入至所述窗体对象中;通过所述窗体对象接收在所述窗体对象对应的图形用户界面上触发的原生操作信号;根据所述原生操作信号生成操作消息;通过所述窗体对象将所述操作消息添加至所述视图控制器对象;根据所述操作消息的消息类型通过所述视图控制器对象确定匹配的目标业务逻辑对象,并通过所述目标业务逻辑对象处理所述操作消息。

该电子设备可以实现本申请实施例所提供的数据处理方法任一实施例中的步骤,因此,可以实现本申请实施例所提供的任一数据处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令(计算机程序)来完成,或通过指令(计算机程序)控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的数据处理方法中任一实施例的步骤。

其中,该存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一数据处理方法实施例中的步骤,因此,可以实现本发明实施例所提供的任一数据处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本申请实施例所提供的一种数据处理方法、装置、电子设备以及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1