一种基于面向对象开发的可扩展外挂方法及装置与流程

文档序号:33476588发布日期:2023-03-15 10:31阅读:50来源:国知局
一种基于面向对象开发的可扩展外挂方法及装置与流程

1.本发明涉及插件领域,尤其是一种基于面向对象开发的可扩展外挂方法及装置。


背景技术:

2.在计划开发一款app应用的时候,随着需求增加,代码也会滚雪球式增长,当项目积累一定程度,我们的app变得异常难维护,其中包括、代码冗余、代码耦合过高、爆炸式增长的模块及常量维护等。
3.当前在前端开发领域,我们惯用函数式编程应对我们的需求开发,但当需求不断递增,项目越来越庞大时,这是暴露的弊端也显露出来,代码结构混乱、冗余的常量、数量庞大的模块结构等,此时我们迫切需要一种方式来对代码瘦身,需要一种约束使代码结构更层次分明。


技术实现要素:

4.为解决现有技术存在的上述问题,本发明提供一种基于面向对象开发的可扩展外挂方法及装置,通过添加插件形式集成,插件管理主应用状态,管理实现自身功能,插件集成只需在应用初始化进行挂载即可在某个时候进行卸载。
5.为实现上述目的,本发明采用下述技术方案:
6.在本发明一实施例中,提出了一种基于面向对象开发的可扩展外挂方法,该方法包括:
7.s01、基于对象的状态管理类用于主应用状态管理,实现store类;
8.s02、基于对象的状态管理类plugin类用于插件管理,实现plugin类;
9.s03、基于对象的plugincontrol类用于管理plugin注册及主应用状态同步,实现plugincontrol;
10.s04、在主应用加载外挂的applyplugin勾子方法,实现applyplugin;
11.s05、实现useplugin的勾子方法。
12.进一步地,所述s01包括:
13.s011、通过观察者模式创建store类;
14.s012、store接收的参数分别为初始化状态与状态处理函数,状态处理函数用于返回发起响应的数据处理操作;
15.s013、store暴露发起响应、得到当前所有状态、监听、移除监听方法。
16.进一步地,所述s02包括:
17.s021、继承自store;
18.s022、新增私有属性pluginname用于插件标识;
19.s023、提供notify方法,告知useplugin勾子程序更新状态。
20.进一步地,所述s03包括:
21.s031、创建plugincontrol类,接收2个参数,参数为主应用实例与状态处理函数;
22.s032、申明pluginmap变量map类型,用于存储插件名称;
23.s033、构建setplugins方法传入插件类,判断为不重复插件并创建实例存入pluginmap变量;
24.s034、构建getpluginbyname方法,根据名称返回插件实例;
25.s035、构建reducer方法,根据传入type类型,查找所有插件状态并返回结果。
26.进一步地,所述s04包括:
27.s041、applyplugin接收1个参数,为plugin类数组;
28.s042、在applyplugin中,通过store.getstate得到主应用状态;
29.s043、通过遍历外挂数组,将主应用状态替换外挂应用状态实现数据同步。
30.进一步地,所述s05包括:
31.s051、useplugin接收组件名参数;
32.s052、通过plugincontrol对象getpluginbyname方法得到插件实例;
33.s053、当插件实例存在时,调用插件subscribe方法建立监听,并通知组件重绘。
34.在本发明一实施例中,还提出了一种基于面向对象开发的可扩展外挂装置,该装置包括:
35.store模块、基于对象的状态管理类用于主应用状态管理,实现store类;
36.plugin模块、基于对象的状态管理类plugin类用于插件管理,实现plugin类;
37.plugincontrol模块、基于对象的plugincontrol类用于管理plugin注册及主应用状态同步,实现plugincontrol;
38.applyplugin模块、在主应用加载外挂的applyplugin勾子方法,实现applyplugin;
39.useplugin模块、实现useplugin的勾子方法。
40.进一步地,所述store模块包括:
41.创建模块、通过观察者模式创建store类;
42.store参数接收模块、store接收的参数分别为初始化状态与状态处理函数,状态处理函数用于返回发起响应的数据处理操作;
43.暴露模块、store暴露发起响应、得到当前所有状态、监听、移除监听方法。
44.进一步地,所述plugin模块包括:
45.继承模块、继承自store;
46.pluginname模块、新增私有属性pluginname用于插件标识;
47.notify方法模块、提供notify方法,告知useplugin勾子程序更新状态。
48.进一步地,所述plugincontrol模块包括:
49.plugincontrol参数接收模块、创建plugincontrol类,接收2个参数,参数为主应用实例与状态处理函数;
50.pluginmap模块、申明pluginmap变量map类型,用于存储插件名称;
51.setplugins模块、构建setplugins方法传入插件类,判断为不重复插件并创建实例存入pluginmap变量;
52.getpluginbyname模块、构建getpluginbyname方法,根据名称返回插件实例;
53.reducer模块、构建reducer方法,根据传入type类型,查找所有插件状态并返回结
果。
54.进一步地,所述applyplugin模块包括:
55.applyplugin参数接收模块、applyplugin接收1个参数,为plugin类数组;
56.主应用状态获取模块、在applyplugin中,通过store.getstate得到主应用状态;
57.数据同步模块、通过遍历外挂数组,将主应用状态替换外挂应用状态实现数据同步。
58.进一步地,所述useplugin模块包括:
59.useplugin参数接收模块、useplugin接收组件名参数;
60.插件实例获取模块、通过plugincontrol对象getpluginbyname方法得到插件实例;
61.监听通知模块、当插件实例存在时,调用插件subscribe方法建立监听,并通知组件重绘。
62.在本发明一实施例中,还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现前述基于面向对象开发的可扩展外挂方法。
63.在本发明一实施例中,还提出了一种计算机可读存储介质,计算机可读存储介质存储有执行基于面向对象开发的可扩展外挂方法的计算机程序。
64.有益效果:
65.本发明将功能与应用拆分,大大减少代码间的耦合度,对需要的功能只需在应用初始化时加载对应外挂即可,外挂实例相互不干扰,可以通过对象继承扩展更多方法,外挂与视图可通过useplugin建立访问,简化了在视图层书写大量业务逻辑。
附图说明
66.图1是本发明一实施例的基于面向对象开发的可扩展外挂方法流程示意图;
67.图2是本发明实施例一的逻辑图;
68.图3是本发明实施例一的结构图;
69.图4是本发明实施例一的方法调用示意图;
70.图5是本发明实施例一的可视化编辑器的原理图;
71.图6是本发明实施例一中的外挂呈现逻辑图;
72.图7是是本发明一实施例的基于面向对象开发的可扩展外挂装置结构示意图;
73.图8是本发明一实施例的计算机设备结构示意图。
具体实施方式
74.下面将参考若干示例性实施方式来描述本发明的原理和精神,应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
75.本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件
(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
76.本发明涉及的中英文对照:
77.store类,处理状态数据改变;
78.dispathproxy类,dispatch代理;
79.plugincontrol类,外挂管理;
80.pluginconnector类,管理外挂与应用间的状态更新;
81.plugin类,外挂实体;
82.applyplugin,注册外挂方法;
83.useplugin,获得外挂实例。
84.根据本发明的实施方式,提出了一种基于面向对象开发的可扩展外挂方法及装置,通过将应用功能拆分独立成外挂插件,应用通过初始化将外挂一次性载入,被载入的外挂拥有独立的生命周期,外挂内执行操作,不予其他外挂产生冲突,每个外挂拥有独立的容器对象,在一个应用中,多个外挂通常以多个容器对象协同的形式工作。
85.下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
86.图1是本发明一实施例的基于面向对象开发的可扩展外挂方法流程示意图。如图1所示,该方法包括:
87.s01、基于对象的状态管理类用于主应用状态管理,实现store类;
88.s02、基于对象的状态管理类plugin类用于插件管理,实现plugin类;
89.s03、基于对象的plugincontrol类用于管理plugin注册及主应用状态同步,实现plugincontrol;
90.s04、在主应用加载外挂的applyplugin勾子方法,实现applyplugin;
91.s05、实现useplugin的勾子方法。
92.所述s01包括:
93.s011、通过观察者模式创建store类;
94.s012、store接收的参数分别为初始化状态与状态处理函数,状态处理函数用于返回发起响应的数据处理操作;
95.s013、store暴露发起响应、得到当前所有状态、监听、移除监听方法。
96.所述s02包括:
97.s021、继承自store;
98.s022、新增私有属性pluginname用于插件标识;
99.s023、提供notify方法,告知useplugin勾子程序更新状态。
100.所述s03包括:
101.s031、创建plugincontrol类,接收2个参数,参数为主应用实例与状态处理函数;
102.s032、申明pluginmap变量map类型,用于存储插件名称;
103.s033、构建setplugins方法传入插件类,判断为不重复插件并创建实例存入pluginmap变量;
104.s034、构建getpluginbyname方法,根据名称返回插件实例;
105.s035、构建reducer方法,根据传入type类型,查找所有插件状态并返回结果。
106.所述s04包括:
107.s041、applyplugin接收1个参数,为plugin类数组;
108.s042、在applyplugin中,通过store.getstate得到主应用状态;
109.s043、通过遍历外挂数组,将主应用状态替换外挂应用状态实现数据同步。
110.所述s05包括:
111.s051、useplugin接收组件名参数;
112.s052、通过plugincontrol对象getpluginbyname方法得到插件实例;
113.s053、当插件实例存在时,调用插件subscribe方法建立监听,并通知组件重绘。
114.实施例一:
115.如图2-4所示,首先在主应用入口引入方法applyplugins,该方法要求传入一个数组参数用于初始化载入需要载入的外挂对象;
116.引入需要载入的外挂对象,外挂继承于iplugin接口,iplugin接口提供了容器对象的基本操作,如改变外挂状态、载入、卸载等生命周期勾子函数
117.使用applyplugins([a,b,c])注册需要使用到的外挂,应用会自动在初始化时将外挂的容器状态同步到应用容器中;
[0118]
使用useplugin勾子函数访问指定外挂实例,useplugin接受一个字符参数对应外挂名称,使用该方法可得到应用初始化时创建的外挂实例。
[0119]
如图5所示,在可视化编辑器中,我们将画布定义为主应用对象,他主要提供绘图和与各外挂插件进行数据监听和同步,如,我们需要扩展组件菜单功能,我们可以在主应用创建实例后,通过applyplugins注册组件菜单外挂,当主应用挂载完毕后会将当前组件状态同步到主应用中,并载入外挂视图,在外挂视图中,使用useplugin得到外挂实例对象,我们可以通过调用外挂实例方法实现相应功能。
[0120]
如图6所示,插件与主应用之间的状态更新借助于dispatch代理,当我们发起一个状态更新时,plugincontrol会在发起dispatch之前将画布状态同步到外挂组件。
[0121]
在组件内,可以通过beforedispath afterdispath方法监听发起的action的类型,处理组件视图和业务变化。
[0122]
整个面向对象可扩展外挂,将传统的函数式编程转换为基于对象开发。
[0123]
每个外挂可自身管理状态,在不同外挂间,相互的状态改变不影响其他外挂,只会在当前申明实例中起作用,外挂内可通过notify方法通知使用了useplugin组件状态更新。
[0124]
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
[0125]
基于同一发明构思,本发明还提出一种基于面向对象开发的可扩展外挂装置。该装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“模块”,可以是实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0126]
图7是本发明一实施例的基于面向对象开发的可扩展外挂装置结构示意图。如图7所示,该装置包括:
[0127]
store模块201、基于对象的状态管理类用于主应用状态管理,实现store类;
[0128]
plugin模块202、基于对象的状态管理类plugin类用于插件管理,实现plugin类;
[0129]
plugincontrol模块203、基于对象的plugincontrol类用于管理plugin注册及主应用状态同步,实现plugincontrol;
[0130]
applyplugin模块204、在主应用加载外挂的applyplugin勾子方法,实现applyplugin;
[0131]
useplugin模块205、实现useplugin的勾子方法。
[0132]
所述store模块201包括:
[0133]
创建模块、通过观察者模式创建store类;
[0134]
store参数接收模块、store接收的参数分别为初始化状态与状态处理函数,状态处理函数用于返回发起响应的数据处理操作;
[0135]
暴露模块、store暴露发起响应、得到当前所有状态、监听、移除监听方法。
[0136]
所述plugin模块202包括:
[0137]
继承模块、继承自store;
[0138]
pluginname模块、新增私有属性pluginname用于插件标识;
[0139]
notify方法模块、提供notify方法,告知useplugin勾子程序更新状态。
[0140]
所述plugincontrol模块203包括:
[0141]
plugincontrol参数接收模块、创建plugincontrol类,接收2个参数,参数为主应用实例与状态处理函数;
[0142]
pluginmap模块、申明pluginmap变量map类型,用于存储插件名称;
[0143]
setplugins模块、构建setplugins方法传入插件类,判断为不重复插件并创建实例存入pluginmap变量;
[0144]
getpluginbyname模块、构建getpluginbyname方法,根据名称返回插件实例;
[0145]
reducer模块、构建reducer方法,根据传入type类型,查找所有插件状态并返回结果。
[0146]
所述applyplugin模块204包括:
[0147]
applyplugin参数接收模块、applyplugin接收1个参数,为plugin类数组;
[0148]
主应用状态获取模块、在applyplugin中,通过store.getstate得到主应用状态;
[0149]
数据同步模块、通过遍历外挂数组,将主应用状态替换外挂应用状态实现数据同步。
[0150]
所述useplugin模块205包括:
[0151]
useplugin参数接收模块、useplugin接收组件名参数;
[0152]
插件实例获取模块、通过plugincontrol对象getpluginbyname方法得到插件实例;
[0153]
监听通知模块、当插件实例存在时,调用插件subscribe方法建立监听,并通知组件重绘。
[0154]
应当注意,尽管在上文详细描述中提及了基于面向对象开发的可扩展外挂装置的若干模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
[0155]
基于前述发明构思,如图8所示,本发明还提出一种计算机设备300,包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序330,处理器320执行计算机程序330时实现前述基于面向对象开发的可扩展外挂方法。
[0156]
基于前述发明构思,本发明还提出一种计算机可读存储介质,计算机可读存储介质存储有执行前述基于面向对象开发的可扩展外挂方法的计算机程序。
[0157]
本发明将功能与应用拆分,大大减少代码间的耦合度,对需要的功能只需在应用初始化时加载对应外挂即可,外挂实例相互不干扰,可以通过对象继承扩展更多方法,外挂与视图可通过useplugin建立访问,简化了在视图层书写大量业务逻辑。
[0158]
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包含的各种修改和等同布置。
[0159]
对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1