一种组件的解耦合方法及系统与流程

文档序号:14571719发布日期:2018-06-01 22:34阅读:294来源:国知局
一种组件的解耦合方法及系统与流程

本申请涉及直播技术领域,尤其涉及一种组件的解耦合方法及系统。



背景技术:

目前,随着移动端互联网的发展,移动端APP的功能也越来越丰富,伴随的则是移动端程序中对应的代码也越来越多,代码编译时间增加,逻辑也变得更为复杂。

耦合度,指的是两个组件之间的密切关系程度,降低两个组件之间的耦合度,能减少组件之间相互依赖的程度。

但是,由于目前的移动终端代码之间的耦合度高,故而在运行应用程序时,组件间相互耦合度较高,不利于组件的单独维护。



技术实现要素:

本发明了提供了一种组件的解耦合方法及系统,以解决或者部分解决组件间相互耦合度较高的技术问题。

为解决上述技术问题,本发明提供了一种组件的解耦合方法,所述方法应用于组件的解耦合系统,其中,所述系统包括M个组件,N个应用程序事件接口,信号插槽模块;所述信号插槽模块连接在所述M个组件和所述N个应用程序事件接口之间;

所述方法包括:

接收各组件的状态获知请求;

基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态。

优选的,所述应用程序包括N个应用程序事件,所述N个应用程序事件包括初始化事件、退出事件、应用程序开启事件、应用程序退出事件;每个应用程序事件对应所述应用程序的一个功能;每个应用程序事件的发生表示对应功能的执行;

所述接收各组件的状态获知请求之前,所述方法还包括:

为每个应用程序事件创建接口。

优选的,所述接收各组件的状态获知请求之前,所述方法还包括:

为信号插槽模块设置创建N个获取信号接口,所述N个获取信号接口用于和对应的应用程序事件接口进行数据传输,进而获取到对应的应用程序事件。

优选的,所述接收各组件的状态获知请求之前,所述方法还包括:

为各组件绑定对应的应用程序事件。

优选的,所述为各组件绑定对应的应用程序事件,具体包括:

获得各组件的初始化的回调函数,用于对应的应用程序事件运行时产生的状态信号到来时触发调用;

将各组件的回调函数和所述N个获取信号接口进行绑定。

优选的,所述接收各组件的状态获知请求之后,所述方法还包括:

实时接收各应用程序事件的运行状态。

优选的,所述基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态,具体包括:

触发所述N个获取信号接口获取对应的应用程序事件的运行状态参数。

基于所述N个获取信号接口获取对应的应用程序事件的运行状态参数的情况,触发各组件的回调函数运行调用对应的运行状态参数。

本发明公开了一种组件的解耦合系统,包括:

M个组件;

N个应用程序事件接口,各应用程序事件接口用于传输各自对应的程序事件的执行状态;

信号插槽模块,连接在所述M个组件和所述N个应用程序事件接口之间,为每个应用程序事件都设置有对应的接口插槽;用于接收各组件的状态获知请求,基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态。

优选的,所述应用程序包括N个应用程序事件,所述N个应用程序事件包括初始化事件、退出事件、应用程序开启事件、应用程序退出事件;每个应用程序事件对应所述应用程序的一个功能;每个应用程序事件的发生表示对应功能的执行;

所述系统还包括:

第一创建模块,用于接收各组件的状态获知请求之前,为每个应用程序事件创建接口。

优选的,所述系统还包括:

第二创建模块,用于接收各组件的状态获知请求之前,为信号插槽模块设置创建N个获取信号接口,所述N个获取信号接口用于和对应的应用程序事件接口进行数据传输,进而获取到对应的应用程序事件。

优选的,所述系统还包括:

绑定模块,用于接收各组件的状态获知请求之前,为各组件绑定对应的应用程序事件。

优选的,绑定模块,具体包括:

获得模块,用于获得各组件的初始化的回调函数,用于对应的应用程序事件运行时产生的状态信号到来时触发调用;

绑定子模块,用于将各组件的回调函数和所述N个获取信号接口进行绑定。

优选的,所述信号插槽模块,具体用于接收各组件的状态获知请求之后,实时接收各应用程序事件的运行状态。

优选的,所述信号插槽模块,具体用于触发所述N个获取信号接口获取对应的应用程序事件的运行状态参数;基于所述N个获取信号接口获取对应的应用程序事件的运行状态参数的情况,触发各组件的回调函数运行调用对应的运行状态参数。

本发明公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

本发明公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。

通过本发明的一个或者多个技术方案,本发明具有以下有益效果或者优点:

本发明公开了一种组件的解耦合方法和系统,首先设置了M个组件,N个应用程序事件接口,信号插槽模块;利用信号插槽模块连接在所述M个组件和所述N个应用程序事件接口之间,用来接收各组件的状态获知请求;然后基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态。故而能够将应用程序和组件之间的通信利用信号插槽的方式进行中转,进而降低组件之间的关联程度。

附图说明

图1为本发明实施例中一种组件的解耦合的系统的架构图;

图2为本发明实施例中一种组件的解耦合的方法实施过程图。

具体实施方式

为了使本申请所属技术领域中的技术人员更清楚地理解本申请,下面结合附图,通过具体实施例对本申请技术方案作详细描述。

为了解决上述问题,本发明实施例采用了信号插槽的方式,将应用程序和组件之间的通信利用信号插槽的方式进行中转,进而降低组件之间的关联程度。另外,本发明设计几个核心的事件,从而其他组件关心的组件可以订阅,组件于组件之间并不需要交互,也不需要知道彼此,事件的分发于订阅者也不需要知道彼此,从而极大的进行了解耦。

在具体的实施过程中,首先参看图1,介绍一种组件的解耦合的系统,包括:M个组件1,N个应用程序事件接口2,信号插槽模块3;

N个应用程序事件接口2,各应用程序事件接口用于传输各自对应的程序事件的执行状态;

信号插槽模块3,连接在所述M个组件1和所述N个应用程序事件接口2之间,为每个应用程序事件都设置有对应的接口插槽;用于接收各组件的状态获知请求,基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态。

在具体的实施过程中,所述应用程序包括N个应用程序事件,所述N个应用程序事件包括初始化事件、退出事件、应用程序开启事件、应用程序退出事件;每个应用程序事件对应所述应用程序的一个功能;每个应用程序事件的发生表示对应功能的执行;进一步的,上述系统还包括:第一创建模块,用于接收各组件的状态获知请求之前,为每个应用程序事件创建接口。

进一步的,上述系统还包括:第二创建模块,用于接收各组件的状态获知请求之前,为信号插槽模块3设置创建N个获取信号接口,所述N个获取信号接口用于和对应的应用程序事件接口进行数据传输,进而获取到对应的应用程序事件。

进一步的,上述系统还包括:绑定模块,用于接收各组件的状态获知请求之前,为各组件绑定对应的应用程序事件。

进一步的,绑定模块,具体包括:

获得模块,用于获得各组件的初始化的回调函数,用于对应的应用程序事件运行时产生的状态信号到来时触发调用;

绑定子模块,用于将各组件的回调函数和所述N个获取信号接口进行绑定。

进一步的,所述信号插槽模块3,具体用于

接收各组件的状态获知请求之后,实时接收各应用程序事件的运行状态。

所述信号插槽模块3,具体用于触发所述N个获取信号接口获取对应的应用程序事件的运行状态参数。基于所述N个获取信号接口获取对应的应用程序事件的运行状态参数的情况,触发各组件的回调函数运行调用对应的运行状态参数。

基于同一发明构思,在本发明实施例中,公开了一种组件的解耦合方法,参看图2,该方法包括:

步骤11,接收各组件的状态获知请求。

步骤12,基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态。

在具体的实施过程中,在接收各组件的状态获知请求之前,会对M个组件、N个应用程序事件接口,信号插槽模块分别进行相应的设置。

进一步的,所述应用程序包括N个应用程序事件,所述N个应用程序事件包括初始化事件、退出事件、应用程序开启事件、应用程序退出事件;每个应用程序事件对应所述应用程序的一个功能;每个应用程序事件的发生表示对应功能的执行;

故而接收各组件的状态获知请求之前,还会为每个应用程序事件创建接口。

在具体的实施过程中,对于移动端APP最主要关心的事件有初始化事件,退出事件,APP打开到前台事件,APP退出进入后台事件。本发明实施例的实现基于BOOST开源库提供的信号插槽机制来实现对这些事件的订阅和监控。

对于组件需要关心的事件,都设计一个事件接口。举例来说,每个组件都会关心整个APP的创建事件,从而可以做一些初始化工作,如申请资源,初始化变量等等,关心整个APP的退出事件,从而可以做一些退出工作,如资源释放,关心整个APP激活到前台界面,关心整个APP退出到系统后台。故而,本发明实施例中则对每个事件设计一个接口,如下所示。

初始化接口:

void OnCreate();

退出接口:

void OnDestroy();

APP激活到前台接口:

Void OnForeground();

通过上述步骤就完成了组件需要关注的事件的接口。

作为一种可选的实施例,在接收各组件的状态获知请求之前,为信号插槽模块3设置创建N个获取信号接口,所述N个获取信号接口用于和对应的应用程序事件接口进行数据传输,进而获取到对应的应用程序事件。

而在对信号插槽模块3的处理过程中,本发明实施例使用开源库Boost,其提供了信号槽机制signals2,信号槽则实现了线程安全的观察模式。

其中,signals2有一个重要的操作函数是connect,它把槽连接到信号上,包括函数指针,函数对象,通过信号和插槽机制,可以灵活的处理信号与槽函数的连接与断开。对于每个事件本发明实施例定义一个信号signals2来实现信号与槽的机制。具体实现如下:

初始化事件的信号

对于初始化接口OnCreate,本发明实施例编写一个获取信号的接口和初始化接口对应:

signals2::signal<void()>&GetSignalOnCreate()

{

其中GetSignalOnCreate则是本发明实施例编写的获取信号的接口,用来和初始化接口进行通信,进而获取到初始化接口中的执行状态。

static signals2::signal&lt;void()&gt;SigOnCreate;

定义一个静态变量信号signals2::signal的实例对象SigOnCreate。

return SigOnCreate;

返回实例对象。

}

退出接口的信号:

对于退出接口OnDestroy,本发明实施例编写一个获取信号的接口,来和退出接口的信号对应:

signals2::signal<void()>&GetSignalOnDestroy()

{

其中GetSignalOnDestroy则是本发明实施例编写的获取信号的接口。用来和退出接口进行通信,进而获取到退出接口中的执行状态。

static signals2::signal&lt;void()&gt;SigOnDestroy;

定义一个静态变量信号signals2::signal的实例对象SigOnDestroy。

return SigOnDestroy;

返回实例对象。

}

激活到前台的信号:

对于激活到前台的接口OnForeground,本发明实施例编写一个获取信号的接口:

signals2::signal<void()>&GetSignalOnForeground()

{

其中GetSignalOnForeground则是本发明实施例编写的获取信号的接口。

static signals2::signal&lt;void()&gt;SigOnForeground;

定义一个静态变量信号signals2::signal的实例对象SigOnForeground。

return SigOnForeground;

返回实例对象。

}

通过上述设置,本发明实施例对每个事件接口编写了一个信号获取的接口,并且定义了该信号的实例对象。通过这个步骤就实现了事件接口的信号定义与获取。

而在为每个应用程序事件创建接口,且获得为信号插槽模块设置创建N个获取信号接口的基础上,会为各组件绑定对应的应用程序事件。

在具体的实施过程中,为各组件绑定对应的应用程序事件,具体包括:

获得各组件的初始化的回调函数,用于对应的应用程序事件运行时产生的状态信号到来时触发调用;

将各组件的回调函数和所述N个获取信号接口进行绑定。

进一步的,对于客户端的各个组件,各组件如果对某个事件感兴趣,则需要去获取其信号来进行绑定,从而该信号触发时,组件便可以感知到该事件。例如对于网络组件,需要在APP启动创建时,来初始化网络,那么其则可以订阅创建事件,从而APP启动时可以知道何时启动了。具体实现如下:

例如本文举例组件是网络组件,现在需要订阅初始化创建事件。

首先获得各组件的初始化的回调函数,用于对应的应用程序事件运行时产生的状态信号到来时触发调用;然后将各组件的回调函数和所述N个获取信号接口进行绑定。

例如在网络组件中定义一个初始化的回调函数,用于信号到来时触发此函数的调用。

Void NetWorkCreate(){

在此函数内部则可以实现网络的初始化等工作。

}

先定义一个网络创建的回调函数,从而APP启动时信号会触发此函数的调用。

获取创建初始化信号来绑定函数NetWorkCreate。

首先调用步骤为信号插槽模块编写的获取创建信号接口GetSignal OnCreate:

signals2::signal<void()>&sigCreate=GetSignalOnCreate()

得到sig Create后则绑定函数Net Work Create。

sigCreate.connect(&NetWorkCreate);

从而绑定了此信号和回调函数NetWorkCreate。

同样的方法对于其他事件,也可以获取其他事件的信号来绑定。

同时一个信号可以绑定多个回调函数,从而可以绑定多个组件。

从本文可以看出,任何一个组件的事件订阅是不需要知道其他组件,也不需要知道产生此信号的主体,从而实现解耦合。

通过这个步骤就实现了网络组件来订阅一个初始化创建的事件信号。

故而,在接收各组件的状态获知请求之后,可实时接收各应用程序事件的运行状态。

而在具体的实施过程中,在设置有上述各个组件的事件订阅后,则信号的触发则是在程序对应的事件中去执行。例如本文的APP启动时,会执行APP的启动函数,此时是APP初始化创建的过程,系统在启动APP时,首先的入口则是启动函数,那么在此接口中则可以获取到对应的事件信号来触发信号的产生。

例如程序启动时,会调用接口AppLaunch:

Void AppLaunch()

{

此接口则是在APP启动时会被调用,从执行整个APP的初始化过程和创建过程。

那么此时本文则需要获取创建信号并触发此信号。

首先调用步骤上述为信号插槽模块编写的获取创建信号接口GetSignalOnCreate:

signals2::signal<void()>&sigCreate=GetSignalOnCreate()

sigCreate();

触发创建信号,从而订阅于此信号的所有回调函数都会被执行。

从此次可以看出,事件的产生者和事件的订阅者是互不知道,从而产生者不需要知道订阅者,订阅者也不需要知道产生者,从而实现了解耦合。

进一步的,在实时接收各应用程序事件的运行状态的基础上,基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态,具体包括:

触发所述N个获取信号接口获取对应的应用程序事件的运行状态参数。

基于所述N个获取信号接口获取对应的应用程序事件的运行状态参数的情况,触发各组件的回调函数运行调用对应的运行状态参数。

在上述实施例中,当订阅了各应用程序事件之后,就可以通过信号插槽模块的作为消息中转实时获得各应用程序事件的执行状态。当然,本发明实施例的组件还可以取消订阅各应用程序事件,进而断开和信号插槽的连接。

在具体的实施过程中,当程序退出时,或者某些信号不在需要,则需要将信号进行断开,断开也非常方便,直接调用信号的断开接口即可。具体实现如下:

假设程序已经初始化成功,后续不需要在使用到创建信号,则可以断开创建信号。既可以只断开某个组件,也可以对所以的订阅组件都断开。

首先调用步骤为信号插槽模块编写的获取创建信号接口GetSignalOnCreate:

signals2::signal<void()>&sigCreate=GetSignalOnCreate()

sigCreate.;

然后调用信号接口,来断开某个组件,从而当信号产生时,改组件不会接收到创建的信号。

SignalOnNetworkChange.disconnect(传入需要断开的组件);

也可以断开所有订阅的组件。

SignalOnNetworkChange.disconnect_all_slots();

则是断开所有的组件。

以上实施例便是组件的解耦合方法,基于同一发明构思,下面的实施例介绍一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法实施例中的步骤。

本发明实施例公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法实施例中的步骤。

通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:

本发明公开了一种组件的解耦合方法和系统,首先设置了M个组件,N个应用程序事件接口,信号插槽模块;利用信号插槽模块连接在所述M个组件和所述N个应用程序事件接口之间,用来接收各组件的状态获知请求;然后基于所述各组件的状态获知请求向对应的应用程序事件接口获取对应的应用程序事件执行状态。故而能够将应用程序和组件之间的通信利用信号插槽的方式进行中转,进而降低组件之间的关联程度。

尽管已描述了本申请的优选实施例,但本领域内的普通技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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