CN112579237A - 基于mvvm模式的事件响应方法、装置、设备和介质 - Google Patents

基于mvvm模式的事件响应方法、装置、设备和介质 Download PDF

Info

Publication number
CN112579237A
CN112579237A CN202011501995.1A CN202011501995A CN112579237A CN 112579237 A CN112579237 A CN 112579237A CN 202011501995 A CN202011501995 A CN 202011501995A CN 112579237 A CN112579237 A CN 112579237A
Authority
CN
China
Prior art keywords
observed person
event response
observed
service object
mvvm mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011501995.1A
Other languages
English (en)
Other versions
CN112579237B (zh
Inventor
张楚翘
梁沛恒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bigo Technology Pte Ltd
Original Assignee
Bigo Technology Pte Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Bigo Technology Pte Ltd filed Critical Bigo Technology Pte Ltd
Priority to CN202011501995.1A priority Critical patent/CN112579237B/zh
Priority claimed from CN202011501995.1A external-priority patent/CN112579237B/zh
Publication of CN112579237A publication Critical patent/CN112579237A/zh
Application granted granted Critical
Publication of CN112579237B publication Critical patent/CN112579237B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种基于MVVM模式的事件响应方法、装置、设备和介质。其中,该方法包括:为MVVM模式中的目标视图模型配置对应的被观察者;如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。本发明实施例提供的技术方案,实现该被观察者与请求观察该被观察者的各个业务对象之间的同步更改,简化了MVVM模式中的事件响应逻辑,使得MVVM模式中的事件响应逻辑变得易于学习,降低MVVM模式中事件响应逻辑的实现难度,提高MVVM模式中事件响应的便捷性。

Description

基于MVVM模式的事件响应方法、装置、设备和介质
技术领域
本发明实施例涉及页面显示技术领域,尤其涉及一种基于MVVM模式的事件响应方法、装置、设备和介质。
背景技术
随着客户端业务的迭代,客户端上的业务代码也不断增加,使业务代码与用户界面上的各个视图控件堆积在一起,此时为了提高业务代码的可复用性和可维护性,引入了模型-视图-视图模型(Model-View-Viewmodel,MVVM)的软件架构模式,将视图控件与业务逻辑区分开来,通过专有的View和Viewmodel来解耦实现。
目前,现有的MVVM模式中,为了响应视图控件上的各项事件交互,通常会将MVVM模式中的各个对象分别定义为观察者(Observable)、被观察者(Observer)和销毁者(DisposeBag)等,并在各对象定义下进行了复杂的封装,以实现各个视图控件上的事件交互逻辑,极大增加了MVVM模式中各视图控件上事件响应的复杂性,而且观察者(Observable)、被观察者(Observer)和销毁者(DisposeBag)等的定义概念复杂,不易于学习,使得MVVM模式中各视图控件上的事件响应逻辑难以实现,不利于推广。
发明内容
本发明实施例提供了一种基于MVVM模式的事件响应方法、装置、设备和介质,简化了MVVM模式中的事件响应逻辑,提高了MVVM模式中事件响应的便捷性。
第一方面,本发明实施例提供了一种基于MVVM模式的事件响应方法,该方法包括:
为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者;
如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。
第二方面,本发明实施例提供了一种基于MVVM模式的事件响应装置,该装置包括:
被观察者配置模块,用于为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者;
事件响应缓存模块,用于如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
事件响应执行模块,用于如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。
第三方面,本发明实施例提供了一种计算机设备,该计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所述的基于MVVM模式的事件响应方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所述的基于MVVM模式的事件响应方法。
本发明实施例提供的一种基于MVVM模式的事件响应方法、装置、设备和介质,为MVVM模式中存在被观察需求的目标视图模型配置对应的被观察者,该被观察者支持MVVM模式中的任一业务对象进行观察,此时在MVVM模式中的某一业务对象请求观察该被观察者,则面向该被观察者,直接缓存用于实现该业务对象与该被观察者同步更改的事件响应操作,以在检测到该被观察者的更改事件时,能够遍历执行该被观察者下已缓存的各个事件响应操作,从而实现该被观察者与请求观察该被观察者的各个业务对象之间的同步更改,无需在MVVM模式中额外定义观察者等概念以及各对象定义下关于事件交互逻辑的复杂封装,简化了MVVM模式中的事件响应逻辑,使得MVVM模式中的事件响应逻辑变得易于学习,降低MVVM模式中事件响应逻辑的实现难度,提高MVVM模式中事件响应的便捷性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1A为本发明实施例一提供的一种基于MVVM模式的事件响应方法的流程图;
图1B为本发明实施例一提供的基于MVVM模式的事件响应过程的原理示意图;
图2A为本发明实施例二提供的一种基于MVVM模式的事件响应方法的流程图;
图2B为本发明实施例二提供的基于MVVM模式的事件响应过程的原理示意图;
图3A为本发明实施例三提供的一种基于MVVM模式的事件响应方法的流程图;
图3B为本发明实施例三提供的方法中事件响应销毁过程的原理示意图;
图4A为本发明实施例四提供的一种基于MVVM模式的事件响应方法的流程图;
图4B为本发明实施例四提供的方法中MVVM模式中的目标视图模型的查找过程的原理示意图;
图5为本发明实施例五提供的一种基于MVVM模式的事件响应装置的结构示意图;
图6为本发明实施例六提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
实施例一
图1A为本发明实施例一提供的一种基于MVVM模式的事件响应方法的流程图,本实施例可适用于对任一客户端所采用的MVVM模式内的原生控件进行事件交互的情况中。本实施例提供的一种基于MVVM模式的事件响应方法可以由本发明实施例提供的基于MVVM模式的事件响应装置来执行,该装置可以通过软件和/或硬件的方式来实现,并集成在执行本方法的计算机设备中,该计算机设备可以是预先配置有采用MVVM模式所设计的客户端应用的终端设备。
具体的,参考图1A,该方法可以包括如下步骤:
S110,为MVVM模式中的目标视图模型配置对应的被观察者。
具体的,为了提高客户端内面向各个原生控件的业务代码的可复用性和可维护性,会在客户端的设计上引入MVVM软件架构模式,将客户端上原生的视图控件与业务逻辑区分开来,通过专有的视图(View)和视图模型(Viewmodel)来解耦实现。此时,MVVM模式下存在业务模型(Model)、视图(View)和视图模型(Viewmodel)三部分,其中业务模型(Model)用于定义采用MVVM模式所设计的客户端内各项业务数据的数据结构,视图(View)用于定义客户端在可视化界面内通过各个原生控件对业务数据的展现,视图模型(Viewmodel)作为业务模型(Model)与视图(View)之间的试图适配器存在,从视图层中将原本由视图控制器(View Controller)所负责的业务模型(Model)与视图(View)之间的业务转换逻辑抽取出来,专门由该视图模型(Viewmodel)进行处理,从而将视图与业务逻辑进行全面解耦,以降低视图控制器(View Controller)的处理压力。具体的,视图模型(Viewmodel)的业务功能可以分为如下两种:1)将业务模型(Model)内的业务数据转换到视图(View)进行展现,通过数据绑定来实现;2)将视图(View)上触发的更改事件转换到业务模型(Model)内的业务数据进行存储,通过领域对象模型(Domain Object Model,DOM)下的事件监听来实现,从而实现视图模型(Viewmodel)对于业务模型(Model)与视图(View)之间的双向绑定。
可选的,由于MVVM模式中的视图模型能够将业务模型与视图关联起来,此时业务模型与视图中的任一项发生变化时,视图模型均会获知,而为了实现业务模型与视图之间的同步更改,可以认为视图模型下描述业务模型或者视图的某一变量存在判断是否发生变化的被观察需求,以使MVVM模式中与该变量相关的对象能够同步更改,因此本实施例可以从MVVM模式中查找出各个存在被观察需求的目标视图模型,进而在该目标视图模型内创建一个被观察者类,用于封装该目标视图模型内需要被观察的各个变量,将封装后的变量作为该目标视图模型内所配置的被观察者,此时该目标视图模型内所配置的各个被观察者均支持MVVM模式内的任一业务对象来请求对其进行观察,以便后续在观察到该被观察者发生更改时,能够同步更改该业务对象的相关信息。
示例性的,本实施例可以在目标视图模型(Viewmodel)里添加想观察的变量用@Observable修饰,将该变量配置为被观察者,如@Observable public var progress:Float=0.0;说明所声明的progress变量属于被观察者,由属性包装器(@propertywrapper)来实现。
S120,如果MVVM模式中的业务对象请求观察该被观察者,则面向被观察者,缓存用于实现该业务对象与被观察者同步更改的事件响应操作。
其中,MVVM模式中的业务对象是指采用MVVM模式设计客户端时已定义的具备各项业务功能的对象,例如MVVM模式下的视图(View)、业务模型(Model)、视图模型(Viewmodel)和视图控制器(View Controller)等。同时,只有在业务对象与被观察者之间存在业务逻辑联系时,该业务对象才需要观察被观察者是否发生更改,以确保MVVM模式内业务数据与数据展现的一致性,此时本实施例中通过定义该业务对象与被观察者之间的事件响应操作,来实现该业务对象与被观察者同步更改。
具体的,在为目标视图模型配置好对应的被观察者后,会实时检测该被观察者是否被MVVM模式内的各个业务对象所观察,如果检测到MVVM模式中的某一业务对象请求观察该被观察者时,说明该业务对象与该被观察者之间存在相关的业务逻辑,后续在该被观察者发生更改时,需要同步更改该业务对象,以保证MVVM模式下的业务实现一致性,因此可以将该业务对象作为相应的观察者,如图1B所示,通过需要分析该业务对象与该被观察者之间的具体业务逻辑关系,来确定出能够实现该业务对象与被观察者进行同步更改时所需要执行的事件响应操作,然后将该事件响应操作缓存至该被观察者所指向的存储空间内;按照上述方式,能够将MVVM模式内与请求观察该被观察者的各个业务对象相关的事件响应操作均缓存到该被观察者所指向的存储空间内,以便后续该被观察者发生更改时,能够在该被观察者所指向的存储空间内,及时查找出已请求观察该被观察者的各个业务对象相关的事件响应操作,使与该被观察者存在业务逻辑关系的各个业务对象进行全面更新,以保证MVVM模式下的业务一致性。
S130,如果检测到被观察者的更改事件,则遍历执行被观察者下已缓存的各事件响应操作。
可选的,为了保证MVVM模式内的业务及时更新,本实施例会实时检测目标视图模型内所配置的各个被观察者是否发生更改,如果检测到某一被观察者的更改事件,则直接从该被观察者指向的存储空间内遍历查找出已缓存的所有事件响应操作,每一事件响应操作可以实现某一请求观察该被观察者的业务对象与该被观察者之间的同步更改,然后依次执行各个事件响应操作,以对每一事件响应操作所关联的业务对象进行更改,从而保证MVVM模式下的业务一致性;此时,本实施例通过在MVVM模式内仅定义出被观察者,并面向被观察者对应缓存请求观察该被观察者的各个业务对象相关的事件响应操作,即可实现MVVM模式内业务对象与被观察者之间的同步更改,无需额外定义观察者以及观察者的业务逻辑等,简化了MVVM模式中的事件响应逻辑,提高MVVM模式中事件响应的便捷性。
示例性的,MVVM模式中的某一业务对象可以采用如下方式请求观察该被观察者,viewModel.$progress.observed(by:self){[weak self](progress:Float)inself.progressView.progress=progress};其中,self是指请求观察被观察者(progress变量)的业务对象,而{…}的内容为实现该业务对象与被观察者同步更改的事件响应操作,后续会缓存至被观察者指向的存储空间内。
如果检测到self.progress=1.0,则表示被观察者发生更改,便会执行在该被观察者下缓存的各个事件响应操作,也就是{…}的内容。
本实施例提供的技术方案,为MVVM模式中存在被观察需求的目标视图模型配置对应的被观察者,该被观察者支持MVVM模式中的任一业务对象进行观察,此时在MVVM模式中的某一业务对象请求观察该被观察者,则面向该被观察者,直接缓存用于实现该业务对象与该被观察者同步更改的事件响应操作,以在检测到该被观察者的更改事件时,能够遍历执行该被观察者下已缓存的各个事件响应操作,从而实现该被观察者与请求观察该被观察者的各个业务对象之间的同步更改,无需在MVVM模式中额外定义观察者等概念以及各对象定义下关于事件交互逻辑的复杂封装,简化了MVVM模式中的事件响应逻辑,使得MVVM模式中的事件响应逻辑变得易于学习,降低MVVM模式中事件响应逻辑的实现难度,提高MVVM模式中事件响应的便捷性。
实施例二
图2A为本发明实施例二提供的一种基于MVVM模式的事件响应方法的流程图,图2B为本发明实施例二提供的基于MVVM模式的事件响应过程的原理示意图。本实施例是在上述实施例的基础上进行优化。具体的,如图2A所示,本实施例中主要对于事件响应操作的具体缓存过程和具体执行过程进行详细的解释说明。
可选的,如图2A所示,本实施例中可以包括如下步骤:
S210,为MVVM模式中的目标视图模型配置对应的被观察者。
S220,如果MVVM模式中的业务对象请求观察被观察者,在为被观察者预配置的被观察记录表中,以该业务对象的对象标识为键名,缓存用于实现该业务对象与被观察者同步更改的事件响应操作。
可选的,为了避免不同被观察者下所缓存的各事件响应操作出现缓存混乱的情况,而影响到每一被观察者下缓存的事件响应操作的准确性,本实施例在为目标视图模型配置对应的被观察者后,首先会为每一被观察者专门预配置一个被观察记录表中,如图2B所示,通过该被观察记录表来缓存对应被观察者相关的事件响应操作;因此,对于目标视图模型所配置的每一被观察者而言,如果检测到MVVM模式中的某一业务对象请求观察该被观察者,则会根据该业务对象与被观察者之间的业务逻辑联系,确定出用于实现该业务对象与该被观察者同步更改的事件响应操作,进而以该业务对象的对象标识为键名,以用于实现该业务对象与被观察者同步更改的事件响应操作为对应键名下的value值,对应缓存至为该被观察者预配置的被观察记录表中,此时被观察记录表均采用键值对的方式来缓存各个请求观察该被观察者的业务对象相关的事件响应操作,以便后续在执行各个事件响应操作,能够准确获知MVVM模式中需要同步更改的业务对象,从而保证MVVM模式中的业务一致性。
进一步的,为了保证MVVM模式中的任一业务对象能够准确便捷地请求观察该被观察者,本实施例在为MVVM模式中的目标视图模型配置对应的被观察者之后,首先会为该被观察者设定对应的观察调用方法,以支持MVVM模式中的任一业务对象通过调用该观察调用方法来请求观察该被观察者。
示例性的,本实施例中的观察调用方法可以为func_addObserver,以供MVVM模式中的任一业务对象想要观察该被观察者时进行调用,通过每一被观察者的观察调用方法被各个业务对象的调用情况,能够准确分析出MVVM模式中的哪一业务对象会请求观察该被观察者,以便后续将已请求观察该被观察者的各个业务对象相关的事件响应操作缓存至该被观察者的被观察记录表中。
S230,如果MVVM模式中的业务对象取消观察被观察者,则从面向被观察者已缓存的各事件响应操作中,删除该业务对象指向的事件响应操作。
可选的,在业务对象与被观察者之间不存在业务逻辑联系时,说明该被观察者的更改与该业务对象也没有任何关系,那么该业务对象则不再需要观察该被观察者,因此如果MVVM模式中的某一业务对象取消观察被观察者,那么该业务对象也就不需要与该被观察者保持同步更改,因此需要从面向被观察者已缓存的各个事件响应操作中,查找出该业务对象指向的某一事件响应操作进行删除,从而排除在该被观察者发生更改时,所引起的该业务对象的同步更改的情况,保证MVVM模式中事件响应的准确性。
示例性的,对于MVVM模式中的某一业务对象取消观察该被观察者时,所执行的具体删除操作可以为:如果MVVM模式中的业务对象取消观察被观察者,则从被观察者的被观察记录表中,删除以该业务对象的对象标识为键名所缓存的事件响应操作。也就是从该被观察者的被观察记录表中,通过该业务对象的对象标识查找出对应的事件响应操作进行删除,此时所查找出的事件响应操作即为该业务对象指向的事件响应操作。
进一步的,为了保证MVVM模式中的任一业务对象能够准确便捷地取消观察该被观察者,本实施例在为MVVM模式中的目标视图模型配置对应的被观察者之后,还会为该被观察者设定对应的观察移除方法,以支持MVVM模式中的任一业务对象通过调用该观察移除方法来取消观察该被观察者。
示例性的,本实施例中的观察移除方法可以为func_removeObserver,以供MVVM模式中的任一业务对象想要取消观察该被观察者时进行调用,通过每一被观察者的观察移除方法被各个业务对象的调用情况,能够准确分析出MVVM模式中的哪一业务对象会取消观察该被观察者,以便后续从该被观察者的被观察记录表中及时删除该业务对象指向的事件响应操作。
S240,如果检测到被观察者的更改事件,则针对被观察者下已缓存的每一事件响应操作,确定该事件响应操作关联的目标业务对象,并采用该目标业务对象执行该事件响应操作。
可选的,如果检测到某一被观察者的更改事件,则需要对每一已请求观察该被观察者的业务对象进行同步更改,此时针对该被观察者下已缓存的每一事件响应操作,首先确定出每一事件响应操作所关联的目标业务对象,然后由该目标业务对象来对应执行该事件响应操作,从而依次实现各个目标业务对象的同步更改。
此外,由于MVVM模式中的视图(View)展现对应的事件响应结果,可能会存在对事件响应结果优化处理,以确保所展现的结果对用户有一定提示意义,因此本实施例在为MVVM模式中的目标视图模型配置对应的被观察者之后,还会为该被观察者设定对应的事件响应优化方法,以支持MVVM模式中的任一业务对象通过调用该事件响应优化方法,来执行被观察者下与该业务对象关联的事件响应操作,并对得到的事件响应结果进行优化。
具体的,本实施例中的事件响应优化方法可以包括映射(Map)、过滤(Filter)、次数通知(Take)、跳过(Skip)和聚合(Merge)等,在MVVM模式中的任一业务对象通过调用该事件响应优化方法时,会先执行该被观察者下已缓存的与该业务对象相关的事件响应操作,从而得到对应的时间响应结果,然后按照该事件响应优化方法中指定的具体优化操作,对所得到的事件响应结果进行优化,并将该优化结果通知给该业务对象以进行更改。
示例性的,映射(Map)是指执行该被观察者下缓存的与该业务对象相关的事件响应操作,然后对该事件响应结果进行一定规律的映射,并将映射后的结果通知给该业务对象进行更改,例如若是对业务模型中的时间点数据进行响应,那么事件响应结果为1120,进行一定映射后得到11点20分的结果通知给对应的视图进行展现。过滤(Filter)是指执行该被观察者下缓存的与该业务对象相关的事件响应操作,然后对该事件响应结果进行一定规律的过滤,并将符合要求的过滤结果通知给该业务对象进行更改。次数通知(Take)是指执行该被观察者下缓存的与该业务对象相关的事件响应操作,并将事件响应结果通知给该业务对象,并在累计通知一定次数后不再通知。跳过(Skip)是指执行该被观察者下缓存的与该业务对象相关的事件响应操作,并跳过前几次得到的事件响应结果,而将之后的事件响应结果通知给该业务对象。聚合(Merge)是指观察多个被观察者,分别执行多个被观察者下缓存的与该业务对象相关的事件响应操作,并将各个被观察者下的事件响应结果进行一定规律的聚合,然后将聚合结果通知给该业务对象。
本实施例提供的技术方案,为MVVM模式中存在被观察需求的目标视图模型配置对应的被观察者,该被观察者支持MVVM模式中的任一业务对象进行观察,此时在MVVM模式中的某一业务对象请求观察或者取消观察该被观察者,均通过被观察者的被观察记录表来对应缓存或者删除该业务对象相关的事件响应操作,避免不同被观察者下所缓存的各事件响应操作出现缓存混乱的情况,保证各被观察者下所缓存的各事件响应操作的准确性,进而在检测到该被观察者的更改事件时,能够采用对应的目标业务对象分别执行该被观察者下已缓存的各个事件响应操作,从而实现该被观察者与请求观察该被观察者的各个业务对象之间的同步更改,无需在MVVM模式中额外定义观察者等概念以及各对象定义下关于事件交互逻辑的复杂封装,简化了MVVM模式中的事件响应逻辑,使得MVVM模式中的事件响应逻辑变得易于学习,降低MVVM模式中事件响应逻辑的实现难度,提高MVVM模式中事件响应的便捷性。
实施例三
图3A为本发明实施例三提供的一种基于MVVM模式的事件响应方法的流程图,图3B为本发明实施例三提供的方法中事件响应销毁过程的原理示意图。本实施例是在上述实施例的基础上进行优化。具体的,本实施例主要对于MVVM模式中在业务对象销毁时相关事件的具体销毁过程进行详细的解释说明。
可选的,如图3A所示,本实施例中可以包括如下步骤:
S310,为MVVM模式中的目标视图模型配置对应的被观察者。
S320,如果MVVM模式中的业务对象请求观察被观察者,则面向被观察者,缓存用于实现该业务对象与被观察者同步更改的事件响应操作。
S330,通过被观察者向该业务对象反馈对应的被观察通知,并基于被观察通知,将被观察者缓存至为该业务对象预配置的观察记录表中。
可选的,为了使MVVM模式中的各个业务对象准确获知该业务对象已经观察的各被观察者的情况,本实施例还会为该MVVM模式中的每一业务对象扩展对应的被观察者持有(Observable Retainer)属性,并通过配置对应的观察记录表来实现。
具体的,在MVVM模式中的某一业务对象请求观察被观察者后,该被观察者会向该业务对象反馈对应的被观察通知,以使该业务对象将本次所观察的被观察者对应缓存到为该业务对象预配置的观察记录表中,例如在每一业务对象的观察记录表中采用键值对的方式,以被观察者的标识为键名来缓存所观察的各个被观察者。
示例性的,为了保证被观察者面向业务对象的被观察通知的准确反馈,本实施例会为各业务对象预先设定对应的观察通知方法(func_addObservable),被观察者通过调用各个业务对象上的观察通知方法(func_addObservable),以向该业务对象反馈对应的被观察通知。
S340,如果MVVM模式中的业务对象取消观察被观察者,则从面向被观察者已缓存的各事件响应操作中,删除该业务对象指向的事件响应操作。
S350,通过被观察者向该业务对象反馈对应的被观察取消通知,并基于被观察取消通知,从该业务对象的观察记录表中删除被观察者。
可选的,在MVVM模式中的某一业务对象取消观察被观察者后,该被观察者会向该业务对象反馈对应的被观察取消通知,以使该业务对象将本次取消观察的被观察者从为该业务对象预配置的观察记录表中删除,例如在每一业务对象的观察记录表中采用键值对的方式,以被观察者的标识为键名来删除对应缓存的被观察者。
示例性的,为了保证被观察者面向业务对象的被观察取消通知的准确反馈,本实施例会为业务对象预设一个观察取消通知方法(func_removeObservable),被观察者通过调用各个业务对象上的观察取消通知方法,以向该业务对象反馈对应的被观察取消通知,以便从该业务对象的观察记录表中删除本次取消观察的被观察者,从而保证各业务对象的观察记录表对于实际观察的各被观察者的及时更新和准确缓存。
S360,如果检测到被观察者的更改事件,则遍历执行被观察者下已缓存的各事件响应操作。
S370,如果MVVM模式中的任一业务对象被销毁,则查询该业务对象的观察记录表中已缓存的每一被观察者,并由该业务对象取消观察所查询出的每一被观察者,以从面向该被观察者已缓存的各事件响应操作中,删除该业务对象指向的事件响应操作。
可选的,由于MVVM模式中的业务对象存在一定的生命周期,以保证各个业务对象的功能准确性,因此如果MVVM模式中的某一业务对象被销毁,那么与该业务对象相关的事件响应操作也需要被销毁,以避免被观察者发生更改时事件响应操作的不必要执行,因此从被销毁的业务对象的观察记录表中遍历查询已缓存的每一被观察者,并由该业务对象通过调用所查询出的每一被观察者的观察移除方法,以取消该业务对象对所查询出的每一被观察者的观察,从而从面向该被观察者已缓存的各事件响应操作中,对应删除被销毁的业务对象指向的事件响应操作,实现被销毁业务对象的相关事件响应操作的自动销毁,无需实时监控事件响应操作的生命周期,从而提高MVVM模式下的事件响应准确性。
本实施例提供的技术方案,为MVVM模式中的任一业务对象配置对应的观察记录表,通过该观察记录表缓存该业务对象实际观察的各个被观察者,并通过被观察者向该业务对象反馈对应的被观察通知和被观察取消通知,来对应更新观察记录表中所缓存的各被观察者,确保MVVM模式中的任一业务对象实际观察的被观察者的准确性,然后在某一业务对象被销毁时,直接通过该观察记录表来查询实际观察的各个被观察者,从而通过取消对该被观察者的观察,来实现被销毁业务对象相关的事件响应操作的同步销毁,无需实时监控各事件响应操作的生命周期,提高MVVM模式下的事件响应准确性。
实施例四
图4A为本发明实施例四提供的一种基于MVVM模式的事件响应方法的流程图,图4B为本发明实施例四提供的方法中MVVM模式中的目标视图模型的查找过程的原理示意图。本实施例是在上述实施例的基础上进行优化。具体的,本实施例主要对于从MVVM模式中查找目标视图模型的具体查找过程进行详细的解释说明。
可选的,如图4A所示,本实施例中可以包括如下步骤:
S410,从为MVVM模式中的业务对象预配置的视图模型管理容器中,查找存在被观察需求的目标视图模型。
可选的,为了保证视图模型的高效查找,本实施例会为MVVM模式中的每一页面设置一个视图模型管理容器(ViewModel Manager),此时通过为MVVM模式中的各个业务对象分别扩展对应的管理容器属性,以为该业务对象配置该视图模型管理容器,该视图模型管理容器内加载有该业务对象所属页面内的全部视图模型。因此,为了保证MVVM模式中各业务对象的更改准确性,本实施例首先需要从MVVM模式中查找出存在被观察需求的目标视图模型,此时针对MVVM模式中的每一业务对象,从该业务对象预配置的视图模型管理容器中,查找出该业务对象想要观察的目标视图模型,以便后续为该目标视图模型配置对应的被观察者。
示例性的,视图模型管理容器可以采用键值对的方式,以各个视图模型的类名为键名,对应加载各个视图模型,后续可以通过所查找的视图模型的类名,从视图模型管理容器中查找对应的目标视图模型;同时,MVVM模式中同一页面内的业务对象配置有相同的视图模型管理容器。
示例性的,根据业务对象的类型不同,预配置的视图模型管理容器的方式也不同;为MVVM模式中视图控制器(View Controller)配置视图模型管理容器(ViewModelManager)时,使用懒加载的方式,一旦视图控制器启动便为其初始化对应的视图模型管理容器;为MVVM模式中视图(View)配置视图模型管理容器(ViewModel Manager)时,可以通过查找该视图当前的视图控制器,然后将该视图控制器所配置的视图模型管理容器赋值给该视图,同时依次遍历该视图下一层级下的各个视图,将该视图模型管理容器依次赋值给下一层级的各个视图,直至每一层级的视图均配置有对应的视图模型管理容器。
S420,如果未查找到目标视图模型,则按照视图模型查找类型,在MVVM模式中创建一个新的视图模型,作为目标视图模型加载至该业务对象的视图模型管理容器中,并为目标视图模型配置该视图模型管理容器。
可选的,由于初始化配置的视图模型管理容器为空,需要通过查找而不断向该视图模型管理容器创建新的视图模型,以保证视图模型管理容器的全面性,因此从视图模型管理容器中未查找到目标视图模型时,会按照所查找的视图模型的具体类型,在MVVM模式中创建一个对应的视图模型,并作为所查找的目标视图模型,将其加载至该业务对象的视图模型管理容器中,同时为了保证业务对象配置视图模型管理容器的全面性,还会为新创建的目标视图模型配置该视图模型管理容器,以支持该目标视图模型与其他视图模型之间的访问。
S430,为MVVM模式中的目标视图模型配置对应的被观察者。
S440,如果MVVM模式中的业务对象请求观察被观察者,则面向被观察者,缓存用于实现该业务对象与被观察者同步更改的事件响应操作。
S450,如果检测到被观察者的更改事件,则遍历执行被观察者下已缓存的各事件响应操作。
本实施例提供的技术方案,为MVVM模式中的各个业务对象预配置对应的视图模型管理容器,该视图模型管理容器内加载有该业务对象所属页面内的全部视图模型,后续从该视图模型管理容器中查找存在被业务对象观察的需求的目标视图模型,从而保证目标视图模型的查找高效性和准确性。
实施例五
图5为本发明实施例五提供的一种基于MVVM模式的事件响应装置的结构示意图,具体的,如图5所示,该装置可以包括:
被观察者配置模块510,用于为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者;
事件响应缓存模块520,用于如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
事件响应执行模块530,用于如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。
本实施例提供的技术方案,为MVVM模式中存在被观察需求的目标视图模型配置对应的被观察者,该被观察者支持MVVM模式中的任一业务对象进行观察,此时在MVVM模式中的某一业务对象请求观察该被观察者,则面向该被观察者,直接缓存用于实现该业务对象与该被观察者同步更改的事件响应操作,以在检测到该被观察者的更改事件时,能够遍历执行该被观察者下已缓存的各个事件响应操作,从而实现该被观察者与请求观察该被观察者的各个业务对象之间的同步更改,无需在MVVM模式中额外定义观察者等概念以及各对象定义下关于事件交互逻辑的复杂封装,简化了MVVM模式中的事件响应逻辑,使得MVVM模式中的事件响应逻辑变得易于学习,降低MVVM模式中事件响应逻辑的实现难度,提高MVVM模式中事件响应的便捷性。
本实施例提供的基于MVVM模式的事件响应装置可适用于上述任意实施例提供的基于MVVM模式的事件响应方法,具备相应的功能和有益效果。
实施例六
图6为本发明实施例六提供的一种计算机设备的结构示意图,如图6所示,该计算机设备包括处理器60、存储装置61和通信装置62;计算机设备中处理器60的数量可以是一个或多个,图6中以一个处理器60为例;计算机设备中的处理器60、存储装置61和通信装置62可以通过总线或其他方式连接,图6中以通过总线连接为例。
本实施例提供的一种计算机设备可用于执行上述任意实施例提供的基于MVVM模式的事件响应方法,具备相应的功能和有益效果。
实施例七
本发明实施例七还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可实现上述任意实施例中的基于MVVM模式的事件响应方法。该方法具体可以包括:
为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者;
如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的基于MVVM模式的事件响应方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述基于MVVM模式的事件响应装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种基于MVVM模式的事件响应方法,其特征在于,包括:
为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者;
如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。
2.根据权利要求1所述的方法,其特征在于,在面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作之后,还包括:
如果所述MVVM模式中的业务对象取消观察所述被观察者,则从面向所述被观察者已缓存的各事件响应操作中,删除该业务对象指向的事件响应操作。
3.根据权利要求2所述的方法,其特征在于,所述面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作,包括:
在为所述被观察者预配置的被观察记录表中,以该业务对象的对象标识为键名,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
相应的,如果所述MVVM模式中的业务对象取消观察所述被观察者,则从面向所述被观察者已缓存的各事件响应操作中,删除该业务对象指向的事件响应操作,包括:
如果所述MVVM模式中的业务对象取消观察所述被观察者,则从所述被观察者的被观察记录表中,删除以该业务对象的对象标识为键名所缓存的事件响应操作。
4.根据权利要求2所述的方法,其特征在于,在为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者之后,还包括:
设定所述被观察者的观察调用方法和观察移除方法,支持所述MVVM模式中的任一业务对象通过调用该观察调用方法来请求观察所述被观察者,或者通过调用该观察移除方法来取消观察所述被观察者。
5.根据权利要求1所述的方法,其特征在于,所述遍历执行所述被观察者下已缓存的各事件响应操作,包括:
针对所述被观察者下已缓存的每一事件响应操作,确定该事件响应操作关联的目标业务对象,并采用该目标业务对象执行该事件响应操作。
6.根据权利要求1所述的方法,其特征在于,在为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者之后,还包括:
为所述被观察者设定对应的事件响应优化方法,支持所述MVVM模式中的任一业务对象通过调用该事件响应优化方法,来执行所述被观察者下与该业务对象关联的事件响应操作,并对得到的事件响应结果进行优化。
7.根据权利要求2-6任一项所述的方法,其特征在于,在所述MVVM模式中的业务对象请求观察所述被观察者之后,还包括:
通过所述被观察者向该业务对象反馈对应的被观察通知,并基于所述被观察通知,将所述被观察者缓存至为该业务对象预配置的观察记录表中;
相应的,在所述MVVM模式中的业务对象取消观察所述被观察者之后,还包括:
通过所述被观察者向该业务对象反馈对应的被观察取消通知,并基于所述被观察取消通知,从该业务对象的观察记录表中删除所述被观察者。
8.根据权利要求7所述的方法,其特征在于,还包括:
如果所述MVVM模式中的任一业务对象被销毁,则查询该业务对象的观察记录表中已缓存的每一被观察者,并由该业务对象取消观察所查询出的每一被观察者,以从面向该被观察者已缓存的各事件响应操作中,删除该业务对象指向的事件响应操作。
9.根据权利要求1-6任一项所述的方法,其特征在于,在为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者之前,还包括:
从为所述MVVM模式中的业务对象预配置的视图模型管理容器中,查找存在被观察需求的目标视图模型,所述视图模型管理容器内加载有该业务对象所属页面内的全部视图模型。
10.根据权利要求9所述的方法,其特征在于,在从为所述MVVM模式中的业务对象预配置的视图模型管理容器中,查找存在被观察需求的目标视图模型之后,还包括:
如果未查找到所述目标视图模型,则按照视图模型查找类型,在所述MVVM模式中创建一个新的视图模型,作为所述目标视图模型加载至该业务对象的视图模型管理容器中,并为所述目标视图模型配置该视图模型管理容器。
11.根据权利要求9所述的方法,其特征在于,所述MVVM模式中同一页面内的业务对象配置有相同的视图模型管理容器。
12.一种基于MVVM模式的事件响应装置,其特征在于,包括:
被观察者配置模块,用于为模型-视图-视图模型MVVM模式中的目标视图模型配置对应的被观察者;
事件响应缓存模块,用于如果所述MVVM模式中的业务对象请求观察所述被观察者,则面向所述被观察者,缓存用于实现该业务对象与所述被观察者同步更改的事件响应操作;
事件响应执行模块,用于如果检测到所述被观察者的更改事件,则遍历执行所述被观察者下已缓存的各事件响应操作。
13.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的基于MVVM模式的事件响应方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-11中任一所述的基于MVVM模式的事件响应方法。
CN202011501995.1A 2020-12-17 基于mvvm模式的事件响应方法、装置、设备和介质 Active CN112579237B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011501995.1A CN112579237B (zh) 2020-12-17 基于mvvm模式的事件响应方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011501995.1A CN112579237B (zh) 2020-12-17 基于mvvm模式的事件响应方法、装置、设备和介质

Publications (2)

Publication Number Publication Date
CN112579237A true CN112579237A (zh) 2021-03-30
CN112579237B CN112579237B (zh) 2024-06-11

Family

ID=

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894167A (zh) * 2010-07-26 2010-11-24 武汉大学 用户事件模型驱动的网络地图服务方法
US20130332867A1 (en) * 2012-06-12 2013-12-12 Apple Inc. Input device event processing
US20170124464A1 (en) * 2015-10-28 2017-05-04 Fractal Industries, Inc. Rapid predictive analysis of very large data sets using the distributed computational graph
CN109032587A (zh) * 2018-07-19 2018-12-18 武汉斗鱼网络科技有限公司 一种数据流管理框架、方法、终端设备及存储介质
CN109587782A (zh) * 2017-09-28 2019-04-05 中兴通讯股份有限公司 一种同步方法和装置
CN109597614A (zh) * 2017-09-28 2019-04-09 华为技术有限公司 一种业务页面定制方法及系统
CN110321120A (zh) * 2019-07-15 2019-10-11 珠海格力电器股份有限公司 数据处理方法、数据处理装置及计算机可读存储介质
CN110377852A (zh) * 2019-06-24 2019-10-25 平安科技(深圳)有限公司 页面展示数据清除方法、装置、计算机设备和存储介质
CN110636095A (zh) * 2018-06-25 2019-12-31 北京京东尚科信息技术有限公司 设备管控系统及其工作方法
CN110874307A (zh) * 2018-08-29 2020-03-10 北京京东尚科信息技术有限公司 事件埋点的收集上报方法和装置
CN110968318A (zh) * 2019-12-20 2020-04-07 创盛视联数码科技(北京)有限公司 一种MVVM设计模式JavaScript库实现方法
CN111814089A (zh) * 2020-06-30 2020-10-23 广州市百果园信息技术有限公司 一种页面渲染的方法、装置、渲染服务器和存储介质
CN112044057A (zh) * 2020-09-17 2020-12-08 网易(杭州)网络有限公司 一种游戏状态监测方法和装置

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894167A (zh) * 2010-07-26 2010-11-24 武汉大学 用户事件模型驱动的网络地图服务方法
US20130332867A1 (en) * 2012-06-12 2013-12-12 Apple Inc. Input device event processing
US20170124464A1 (en) * 2015-10-28 2017-05-04 Fractal Industries, Inc. Rapid predictive analysis of very large data sets using the distributed computational graph
CN109587782A (zh) * 2017-09-28 2019-04-05 中兴通讯股份有限公司 一种同步方法和装置
CN109597614A (zh) * 2017-09-28 2019-04-09 华为技术有限公司 一种业务页面定制方法及系统
CN110636095A (zh) * 2018-06-25 2019-12-31 北京京东尚科信息技术有限公司 设备管控系统及其工作方法
CN109032587A (zh) * 2018-07-19 2018-12-18 武汉斗鱼网络科技有限公司 一种数据流管理框架、方法、终端设备及存储介质
CN110874307A (zh) * 2018-08-29 2020-03-10 北京京东尚科信息技术有限公司 事件埋点的收集上报方法和装置
CN110377852A (zh) * 2019-06-24 2019-10-25 平安科技(深圳)有限公司 页面展示数据清除方法、装置、计算机设备和存储介质
CN110321120A (zh) * 2019-07-15 2019-10-11 珠海格力电器股份有限公司 数据处理方法、数据处理装置及计算机可读存储介质
CN110968318A (zh) * 2019-12-20 2020-04-07 创盛视联数码科技(北京)有限公司 一种MVVM设计模式JavaScript库实现方法
CN111814089A (zh) * 2020-06-30 2020-10-23 广州市百果园信息技术有限公司 一种页面渲染的方法、装置、渲染服务器和存储介质
CN112044057A (zh) * 2020-09-17 2020-12-08 网易(杭州)网络有限公司 一种游戏状态监测方法和装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
GAOXRY: ""ViewModel的基本使用"", pages 1 - 5, Retrieved from the Internet <URL:《blog.csdn.net/qq_37381177/article/details/109215917》> *
VERONICA GAVRILĂ 等: ""Modern Single Page Application Architecture: A Case Study"", 《 STUDIES IN INFORMATICS AND CONTROL》, vol. 28, no. 2, 1 January 2019 (2019-01-01), pages 231 - 238 *
易剑波;: "基于MVVM模式的WEB前端框架的研究", 信息与电脑(理论版), no. 19, 8 October 2016 (2016-10-08), pages 76 - 77 *
董玮: ""基于云服务的辅助医疗平台系统的研究与开发"", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, 15 August 2015 (2015-08-15), pages 139 - 238 *
顾睿: ""基于MVVM的虚拟DOM轻型Web前端框架的设计与实现"", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, 15 February 2020 (2020-02-15), pages 139 - 195 *

Similar Documents

Publication Publication Date Title
US11086725B2 (en) Orchestration of heterogeneous multi-role applications
US11113158B2 (en) Rolling back kubernetes applications
CN109189856B (zh) 分布式数据库服务管理方法、装置、服务器及存储介质
US20160253362A1 (en) Method, device, node and system for managing file in distributed data warehouse
CN109739815B (zh) 文件处理方法、系统、装置、设备及存储介质
US11347684B2 (en) Rolling back KUBERNETES applications including custom resources
EP2477355A1 (en) Method and device for managing association of network resources
CN111339171B (zh) 数据查询的方法、装置及设备
CN104423982B (zh) 请求的处理方法和处理设备
CN112364110A (zh) 元数据管理方法、装置、设备及计算机存储介质
CN113010224B (zh) 前端微服务化方法、装置、计算机设备和存储介质
JP5782585B1 (ja) サービスインスペクションの方法及びシステム、及びそのコンピュータ読取可能な記憶媒体
CN109271113A (zh) 一种基于云存储的数据管理系统及方法
US20210232418A1 (en) Global cache for container images in a clustered container host system
CN107181773A (zh) 分布式存储系统的数据存储及数据管理方法、设备
JP2010272090A (ja) 処理依頼先管理装置、処理依頼先管理プログラムおよび処理依頼先管理方法
CN109756484B (zh) 基于对象存储的网关的控制方法、控制装置、网关和介质
US20220342888A1 (en) Object tagging
JP2016162016A (ja) 管理情報取得プログラム、管理情報取得方法及び管理情報取得装置
CN111522626B (zh) 一种虚拟机列表生成方法、装置及电子设备
CN112579237A (zh) 基于mvvm模式的事件响应方法、装置、设备和介质
CN112579237B (zh) 基于mvvm模式的事件响应方法、装置、设备和介质
EP3649532B1 (en) Methods, systems, databases and network nodes of data communication networks for handling data posts
US8832176B1 (en) Method and system for processing a large collection of documents
CN110389966B (zh) 一种信息处理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant