一种基于事件驱动的编辑器系统及方法

文档序号:6638229阅读:131来源:国知局
一种基于事件驱动的编辑器系统及方法
【专利摘要】本发明涉及一种基于事件驱动的编辑器系统,该系统包括启动模块、驱动模块以及监听模块,其中:启动模块初始化事件驱动模块及对象模块;驱动模块接收一个或多个事件,所述事件由用户对系统的操作产生;驱动模块将所述事件传递给系统中的对象模块;监听模块位于所述对象模块中,当监听模块监听到事件产生时,根据所述对象模块内部的实现逻辑处理事件。此外,本发明还涉及一种基于事件驱动的编辑器方法。本发明的有益效果在于,系统中的各个对象模块之间没有直接调用关系,所有对象模块都只与事件驱动模块传递信息和命令,提高了整个系统应对需求变化的能力,具有更高的灵活性和扩展性。
【专利说明】
一种基于事件驱动的编辑器系统及方法

【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种基于事件驱动的编辑器系统及方法。

【背景技术】
[0002]编辑器是一类所见即所得的编辑计算机文件的软件的统称,例如,文本编辑器用于编辑/修改文字、图片编辑器用于编辑/修改图片、3D模型编辑器用于编辑/修改3D虚拟模型等。目前编辑器系统的开发技术通常按照功能需求或业务逻辑将系统拆分成各个模块,由每一个模块负责某一特定的功能。但是,大多数模块需要与多个其他模块进行交互才能实现,这往往通过由一个模块向另一个模块直接发送消息或命令,或者是在模块内部直接调用另一模块的功能实现,这会导致模块之间的耦合,表现为不同模块之间的直接调用关系。例如,A模块产生某事件,该事件向模块B发送信息,从而触发模块B实现某个动作。可以很明显地得出,在模块B中肯定存在一个监听段,该监听段监听A模块产生的该事件。如果由于系统需求,用实现等同功能的改进的C模块替代A模块,则需要相应地对模块B进行修改,从而监听C模块。因此,A、C模块与B模块的耦合关系限制了整体系统的扩展性。因此,当模块功能需求发生变化时,或者根据需求需要增加新的模块时,就不得不改变其他与之交互的模块的内部逻辑实现。这种耦合和调用关系极大地限制了系统的灵活性和扩展性。
[0003]因此,需要一种技术,可以在实现上述模块之间交互的前提下,减少或者消除模块之间的耦合,从而降低模块构建时需要考虑多个相关模块的复杂性,同时提高整体系统的灵活性和扩展性。


【发明内容】

[0004]为了减少或者消除系统各模块之间的耦合,提高整体系统的灵活性和扩展性,本发明提供了一种基于事件驱动的编辑器系统,该系统包括启动模块、驱动模块以及监听模块,其中:
启动模块初始化事件驱动模块及对象模块;
驱动模块接收一个或多个事件,所述事件由用户对系统的操作产生;驱动模块将所述事件传递给系统中的对象模块;
监听模块位于所述对象模块中,当监听模块监听到事件产生时,根据所述对象模块内部的实现逻辑处理事件。
[0005]有益地,每个所述对象模块均具有事件监听模块;驱动模块要创建一个或多个事件广播器,每个事件广播器内部维护一个事件监听模块列表。
[0006]有益地,驱动模块根据事件广播器内的事件监听模块列表,将事件主动推送给对象模块,其中所述对象模块的监听模块包含在该事件监听模块列表内。
[0007]有益地,驱动模块将所述事件传递给系统中的对象模块之前,首先通过广播方式询问相关模块是否允许该所述事件发生,如果允许,则传递所述事件,如果不允许,则不会传递所述事件。
[0008]有益地,在所述驱动模块退出之前,每个对象模块必须首先不再监听事件,然后销毁事件监听模块。
[0009]本发明还涉及一种基于事件驱动的编辑器方法,该方法包括:
1)分别初始化事件驱动模块及对象模块;
2)驱动模块首先接收一个或多个事件,其中所述事件由用户对系统的操作产生;然后将所述事件传递给系统中的对象模块;
3)当位于对象模块内的监听模块监听到事件产生时,根据所述对象模块内部的实现逻辑处理事件。
[0010]有益地,在步骤I)中,初始化对象模块步骤中,每个所述对象模块均创建事件监听模块;并且对应地,初始化事件驱动模块步骤中,事件驱动模块要创建一个或多个事件广播器,其中每个事件广播器内部维护一个事件监听模块列表。
[0011]有益地,在步骤2)中,驱动模块通过事件广播器内的事件监听模块列表,将事件主动推送给对象模块,所述对象模块的监听模块包含在该事件监听模块列表内。
[0012]有益地,在步骤2)中,驱动模块将所述事件传递给系统中的对象模块之前,通过广播方式询问相关模块是否允许该所述事件发生,如果允许,则传递所述事件,如果不允许,则不会传递所述事件。
[0013]其中,该方法还包括退出步骤4),在驱动模块退出之前,每个对象模块必须首先不再监听事件,然后销毁事件监听模块。
[0014]本发明的有益效果在于:系统中的各个对象模块之间没有直接调用关系,所有对象模块都只与事件驱动模块传递信息和命令。从而模块与模块之间的调用关系更改为模块与事件驱动模块之间的调用关系。当系统的需求发生变化时,或者需要增加新的模块时,可以不用修改其他模块内部的逻辑实现,只需要修改某一个模块的逻辑实现,并且将实现新需求的模块加入到事件驱动模块的监听模块管理列表中。本发明提高了整个系统应对需求变化的能力,具有更高的灵活性和扩展性。

【专利附图】

【附图说明】
[0015]下面结合附图对本发明的具体实施例进行更详细的说明,其中:
图1所示为根据本发明一实施例,只需要创建一个事件广播器的事件驱动模块的示意图;
图2所示为根据本发明另一实施例,为不同种类的事件创建不同的事件广播器的事件驱动模块的示意图。

【具体实施方式】
[0016]本发明一实施例中,涉及到的对象模块分别包括字体控制模块、视图模块、窗口自适应模块以及其他模块。当字体控制模块对文字的大小、字体、颜色等进行调整时,视图模块要根据字体的调整结果实时改变;同样地,窗口自适应模块应该根据字体的大小调整行字数、根据字体的颜色适应性地调节窗口的亮度等。
[0017]这里需要说明的一点是:文中所述的对象模块是指按照功能需求或业务逻辑将系统拆分成的各个模块,其中每一个模块负责某一特定的功能。
[0018]现有技术通常采用的技术手段是:视图模块和容器自适应模块等对字体控制模块进行监听。字体控制模块一旦对字体的大小、字体、颜色等进行调整时,就会向视图模块和容器自适应模块等发出事件(或者称为命令),在视图模块和容器自适应模块等接收到事件后,再根据其内部的实现逻辑处理事件。然而这样处理的具体缺陷在于,一旦对字体控制模块进行更改,视图模块和容器自适应模块等就无法监听到该事件,除非视图模块和容器自适应模块也做出相应的适应性修改。因此,这种处理方式大大限制了整体系统的扩展性。
[0019]而本发明涉及的一种基于事件驱动的编辑器系统可以解决上述问题。该系统包括启动模块、驱动模块以及监听模块,其中:
该系统首先利用启动模块对驱动器模块和对象模块进行初始化。具体初始化方式如下:
在驱动模块中,创建一个或多个事件广播器,在广播器内维护有一个事件监听模块列表。对于对象模块,为每个对象模块创建唯一的事件监听模块。
[0020]事件广播器用于对事件进行广播,其中事件驱动模块对事件可以有两种广播方式,一种如图1所示,将所有事件同等对待,那么事件驱动模块只需要创建一个事件广播器,事件会通过唯一的事件广播器进行广播。很明显地,这样处理的优点在于只需创建一个事件广播器,创建过程较简单。另一种如图2所示,可以根据事件的特性进行分类,例如为不同种类的事件创建不同的事件广播器,那么事件驱动模块需要根据事件分类的数量创建多个事件广播器,每个事件广播器负责广播属于该种类的一类事件,这样做的优势在于,每一个事件广播器都可以具有针对性地创建自己的事件监听模块列表,不需要监听大量本不属于自己监听范围的事件。
[0021]在本实施例中,驱动模块创建多个事件广播器(1,2……η)。而事件广播器I主要负责属于显示类的事件,事件广播器内部维护的事件监听模块列表包括字体控制模块、视图模块以及窗口自适应模块。同时字体控制模块、视图模块、窗口自适应模块分别创建一个事件监听模块。
[0022]当用户对字体的大小、颜色、字体等进行修改后,该事件被驱动模块接收,其中该事件附带能够完整表示该事件的所有信息,除包括修改后的字体的大小、颜色、字体等,优选地,还包括修改前的大小、颜色、字体等。驱动模块接收到该事件后,根据事件的种类将该事件分配到事件广播器I中。然后根据事件广播器I内的事件监听模块列表,向所有包含事件监听模块列表内的其中一个监听模块的对象模块主动推送事件。对象模块可以根据具体的事件信息结合模块的实现逻辑处理事件。例如,系统中有一个模块专门负责计算图元的面积并通过界面展示,当该模块的监听模块监听到图元的长、宽、形状等数据发生改变时,则可以重新计算图元的面积并显示,而当监听到字体发生改变时,则忽略该事件。
[0023]另外,当用户触发另一与显示类事件无关的事件,例如数据管理模块仅保留近一个月的历史记录,对更久的历史记录数据进行清除。当驱动模块接收到该事件后,可以确定该事件不属于显示类事件,因此不会将其分配到事件广播器I中广播,从而事件广播器I内的事件监听模块列表中对应的对象模块(即该对象模块的事件监听模块存储在该事件广播器的事件监听模块列表中)也不会通过事件广播器I监听到该事件。如果驱动模块只创建一个事件广播器,则当驱动模块接收到该事件后,必须将其分配到唯一的事件广播器中广播。每个事件广播器内仅维护唯一的事件监听模块列表,因此,数据控制模块、字体控制模块、视图模块、窗口自适应模块以及其他模块的事件监听模块共享一个事件监听模块列表,最终导致字体控制模块、视图模块、窗口自适应模块不得不监听与之无关的数据控制模块产生的事件。
[0024]在一优选实施例中,驱动模块将事件传递给对象模块之前,首先通过广播方式询问相关模块是否允许所述事件发生,如果允许,则传递所述事件,如果不允许,则不会传递所述事件。这里的相关模块是指与事件监听模块列表内对应的对象模块相关的模块。例如,当驱动模块将三角形的三条边的边长信息传递给图形处理模块之前,首先通过广播方式询问数学逻辑判断模块,该三条边的边长信息是否符合数学逻辑。例如,三条边的边长分别为4Cm、5Cm、12Cm,那么在将该信息传递给图形处理模块之前,首先应该由数学逻辑判断模块判断其是否符合数学逻辑,由于三角形的任意两条边的和不能大于第三边,因此判断结果为不符合,不应传递该事件。或者,三条边的边长分别为4Cm、5Cm、6Cm,则判断结果为符合,如果该事件通过了数学逻辑判断模块以其他模块的允许,则传递该事件。
[0025]需要注意的一点是,在所述驱动模块退出之前,每个对象模块必须首先不再监听事件,然后销毁事件监听模块。换言之,在系统退出过程中,每个对象模块首先将自己的事件监听模块从事件层的监听列表中移除出去,表示不再需要监听事件,然后销毁事件监听模块,最后再退出模块。如果驱动模块先退出的话,则在驱动模块退出之后,对象模块退出之前这段时间,模块A发出的事件,无法通过驱动模块传递到模块B,这有可能带来不良的后果。
[0026]此外,本发明还涉及一种基于事件驱动的编辑器方法,该方法包括:
I)初始化事件驱动模块及对象模块,初始化步骤如下:
在驱动模块中,创建一个或多个事件广播器,在广播器内维护有一个事件监听模块列表。对于对象模块,为每个对象模块创建一个事件监听模块。
[0027]事件广播器用于对事件进行广播,其中事件驱动模块对事件可以有两种广播方式,一是将所有事件同等对待,那么事件驱动模块只需要创建一个事件广播器,事件会通过唯一的事件广播器进行广播。很明显地,这样处理的优点在于只需创建一个事件广播器,创建过程较简单。二是可以根据事件的特性进行分类,例如为不同种类的事件创建不同的事件广播器,那么事件驱动模块需要根据事件分类的数量创建多个事件广播器,每个事件广播器负责广播属于该种类的一类事件,这样做的优势在于,每一个事件广播器都可以具有针对性地创建自己的事件监听模块列表,不需要监听大量本不属于自己监听范围的事件。
[0028]在本实施例中,驱动模块创建多个事件广播器(1,2……η)。而事件广播器I主要负责属于显示类的事件,事件广播器内部维护的事件监听模块列表包括字体控制模块、视图模块、窗口自适应模块。同时字体控制模块、视图模块、窗口自适应模块分别创建一个事件监听模块。
[0029]2)驱动模块接收一个或多个事件,其中所述事件由用户对系统的操作产生;驱动模块将所述事件传递给系统中的对象模块。具体步骤如下:
当用户对字体的大小、颜色、字体等进行修改后,该事件被驱动模块接收,其中该事件附带能够完整表示该事件的所有信息,除包括修改后的字体的大小、颜色、字体等,优选地,还包括修改前的大小、颜色、字体等。驱动模块接收到该事件后,根据事件的种类将该事件分配到事件广播器I中。然后根据事件广播器I内的事件监听模块列表,向所有包含事件监听模块列表内的监听模块的对象模块主动推送事件。
[0030]在一优选实施例中,驱动模块将事件传递给对象模块之前,首先通过广播方式询问相关模块是否允许该所述事件发生,如果允许,则传递所述事件,如果不允许,则不会传递所述事件。这里的相关模块是指与事件监听模块列表内对应的对象模块相关的模块。例如,当驱动模块将三角形的三条边的边长信息传递给图形处理模块之前,首先通过广播方式询问数学逻辑判断模块,该三条边的边长信息是否符合数学逻辑。例如,三条边的边长分别为4Cm、5Cm、12Cm,那么在将该信息传递给图形处理模块之前,首先应该由数学逻辑判断模块判断其是否答数学逻辑,由于三角形的任意两条边的和不能大于第三边,因此判断结果为不符合。因此,不应传递该事件。或者,三条边的边长分别为4Cm、5Cm、6Cm,则判断结果为符合,如果该事件通过了数学逻辑判断模块以其他等同作用的模块的允许,则传递该事件。
[0031]3)当位于对象模块内的监听模块监听到事件产生时,根据所述对象模块内部的实现逻辑处理事件。
[0032]在一实施例中,系统中有一个模块专门负责计算图元的面积并通过界面展示,当该模块的监听模块监听到图元的长、宽、形状等数据发生改变时,则可以重新计算图元的面积并显示,而当监听到字体发生改变时,则忽略该事件。
[0033]另外,当用户触发另一与显示类事件无关的事件,例如数据管理模块仅保留近一个月的历史记录,对更久的历史记录数据进行清除。当驱动模块接收到该事件后,可以确定该事件不属于显示类事件,因此不会将其分配到事件广播器I中广播,从而事件广播器I内的事件监听模块列表中对应的对象模块(即该对象模块的事件监听模块存储在该事件广播器的事件监听模块列表中)也不通过事件广播器I监听到该事件。如果驱动模块只创建一个事件广播器,则当驱动模块接收到该事件后,必须将其分配到唯一的事件广播器中广播。每个事件广播器内仅维护唯一的事件监听模块列表,因此,数据控制模块、字体控制模块、视图模块、窗口自适应模块以及其他模块的事件监听模块共享一个事件监听模块列表,最终导致字体控制模块、视图模块、窗口自适应模块不得不监听与之无关的数据控制模块产生的事件。
[0034]在一优选实施例中,该方法还包括4)驱动模块的退出:在所述驱动模块退出之前,每个对象模块必须首先不再监听事件,然后销毁事件监听模块。换言之,在系统退出过程中,每个对象模块首先将自己的事件监听模块从事件层的监听列表中移除出去,表示不再需要监听事件,然后销毁事件监听模块,最后再退出模块。如果驱动模块先退出的话,则在驱动模块退出之后,对象模块退出之前这段时间,模块A发出的事件,无法通过驱动模块传递到模块B,这有可能带来不良的后果。
[0035]以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式。只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。即使个别的技术特征在不同的权利要求中引用,本发明还可包含共有这些特征的实施例。
【权利要求】
1.一种基于事件驱动的编辑器系统,其特征在于:该系统包括启动模块、驱动模块以及监听模块,其中: 启动模块初始化事件驱动模块及对象模块; 驱动模块接收一个或多个事件,所述事件由用户对系统的操作产生;驱动模块将所述事件传递给系统中的对象模块; 监听模块位于所述对象模块中,当监听模块监听到事件产生时,根据所述对象模块内部的实现逻辑处理事件。
2.根据权利要求1所述的基于事件驱动的编辑器系统,其特征在于:每个所述对象模块均具有事件监听模块;驱动模块要创建一个或多个事件广播器,每个事件广播器内部维护一个事件监听模块列表。
3.根据权利要求2所述的基于事件驱动的编辑器系统,其特征在于:驱动模块根据事件广播器内的事件监听模块列表,将事件主动推送给对象模块,其中所述对象模块的监听模块包含在该事件监听模块列表内。
4.根据权利要求1所述的基于事件驱动的编辑器系统,其特征在于:驱动模块将所述事件传递给系统中的对象模块之前,首先通过广播方式询问相关模块是否允许该所述事件发生,如果允许,则传递所述事件,如果不允许,则不会传递所述事件。
5.根据权利要求1所述的基于事件驱动的编辑器系统,其特征在于:在所述驱动模块退出之前,每个对象模块必须首先不再监听事件,然后销毁事件监听模块。
6.一种基于事件驱动的利用权利要求1-5中任一项所述的基于事件驱动的编辑器系统的编辑器方法,其特征在于,该方法包括以下步骤: O分别初始化事件驱动模块及对象模块; 2)驱动模块首先接收一个或多个事件,其中所述事件由用户对系统的操作产生;然后将所述事件传递给系统中的对象模块; 3)当位于对象模块内的监听模块监听到事件产生时,根据所述对象模块内部的实现逻辑处理事件。
7.根据权利要求6所述的基于事件驱动的编辑器方法,其特征在于:在步骤I)中,初始化对象模块步骤中,每个所述对象模块均创建事件监听模块;并且对应地,初始化事件驱动模块步骤中,事件驱动模块要创建一个或多个事件广播器,其中每个事件广播器内部维护一个事件监听模块列表。
8.根据权利要求7所述的基于事件驱动的编辑器方法,其特征在于:在步骤2)中,驱动模块通过事件广播器内的事件监听模块列表,将事件主动推送给对象模块,所述对象模块的监听模块包含在该事件监听模块列表内。
9.根据权利要求6所述的基于事件驱动的编辑器方法,其特征在于:在步骤2)中,驱动模块将所述事件传递给系统中的对象模块之前,通过广播方式询问相关模块是否允许该所述事件发生,如果允许,则传递所述事件,如果不允许,则不会传递所述事件。
10.根据权利要求6所述的基于事件驱动的编辑器方法,其特征在于:该方法还包括退出步骤4),在驱动模块退出之前,每个对象模块必须首先不再监听事件,然后销毁事件监听模块。
【文档编号】G06F9/44GK104503748SQ201410760086
【公开日】2015年4月8日 申请日期:2014年12月12日 优先权日:2014年12月12日
【发明者】李晶晶, 董波, 杨林 申请人:珠海金山网络游戏科技有限公司, 成都西山居互动娱乐科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1