掌桥专利:专业的专利平台
掌桥专利
首页

一种业务请求的处理方法和装置

文献发布时间:2023-06-19 12:24:27


一种业务请求的处理方法和装置

技术领域

本发明涉及计算机技术领域,尤其涉及一种业务请求的处理方法和装置。

背景技术

在应用开发过程中,应用中一些业务模块的接口调用比较复杂,现有技术通常会以硬编码的方式组合各个子模块之间的调用关系,随着调用层级的加深,各层需要获取同一个接口数据时,需要重复调用该接口。而且业务之间存在大量相同或者相似功能,需要开发大量相似逻辑。

另外,接口返回的数据通常并非是各个业务所需要的,需要针对不同的业务逻辑,编写不同的数据过滤与数据转换的代码,在业务功能需要变动时,需要更改代码,重新发布上线。而且为了给用户展示多样化信息,不同的业务模块中会嵌套其他业务模块的代码,以便将各种数据融合展示给用户。

在实现本发明过程中,现有技术中至少存在如下问题:

应用开发过程中存在大量重复性的工作,灵活性差,并且每次修改调用关系时,需要重新发布,无法实时生效;重复调用统一接口,增加接口耗时且浪费服务器资源;不同业务模块之间耦合性较高,存在相互嵌套。

发明内容

有鉴于此,本发明实施例提供一种业务请求的处理方法和装置,通过将业务方法抽离成能够独立实现业务功能的组件,并配置组件调用关系,使得可以根据组件调用关系,自动生成组件实例的调用依赖关系,实现对业务请求的处理,降低了业务模块之间的耦合性,同时简化了开发流程,提高了开发效率。

为实现上述目的,根据本发明实施例的一个方面,提供了一种业务请求的处理方法。

本发明实施例的一种业务请求的处理方法,包括:接收业务请求,根据所述业务请求中携带的业务标识,获取对应的配置信息;其中,所述配置信息包括组件调用关系;查询所述组件调用关系中的组件对应的组件实例,根据所述组件调用关系,生成所述组件实例的调用依赖关系;其中,所述组件用于独立实现业务功能,包括从业务方法集中抽离出的业务方法;根据所述调用依赖关系,调用所述组件实例对所述业务请求进行处理,得到处理结果。

可选地,所述组件调用关系包括至少一个组件的组件名称、起始组件标识和所述组件调用的下一组件;所述查询所述组件调用关系中的组件对应的组件实例,根据所述组件调用关系,生成所述组件实例的调用依赖关系,包括:将起始组件添加到起始组件集合;其中,所述起始组件为所述起始组件标识为真的组件;遍历所述起始组件集合的起始组件,对于遍历到的起始组件执行以下处理,直至遍历结束,将最终的拼接结果作为组件实例的调用依赖关系:获取设置步骤:根据所述当前组件的组件名称,获取对应的组件实例,设置所述组件实例的参数信息,将所述组件实例拼接到上一轮循环获取的组件实例之后;其中,所述当前组件的初始值为所述起始组件;循环处理步骤:判断所述当前组件是否存在下一组件,如果所述当前组件存在所述下一组件,则将所述下一组件更新为所述当前组件,重复执行所述获取设置步骤和所述循环处理步骤,直至所述当前组件不存在所述下一组件,得到拼接结果。

可选地,所述获取对应的配置信息的步骤之后,所述方法还包括:对所述组件调用关系中的组件进行检测;其中,所述检测包括循环依赖检测、组件可达性分析、组件存在检测、组件重复检测以及必填信息检测中的一种或者多种;所述循环依赖检测用于检测所述组件之间的调用是否存在循环依赖,所述组件可达性分析用于检测是否存在不可达组件,所述组件存在检测用于检测是否存在所述组件对应的组件实例,所述组件重复检测用于检测所述组件调用关系中是否存在相同组件,所述必填信息检测用于检测所述组件调用关系中是否包括设定的必填信息。

可选地,所述组件调用关系包括至少一个组件的组件名称、起始组件标识和所述组件调用的下一组件;对所述组件调用关系中的组件进行循环依赖检测,包括:从所述组件调用关系中获取起始组件,初始化组件检测集合;其中,所述起始组件为所述起始组件标识为真的组件;判断处理步骤:判断所述组件检测集合中是否存在当前组件,如果所述组件检测集合中不存在所述当前组件,则将所述当前组件添加到所述组件检测集合;其中,所述当前组件的初始值为所述起始组件;确定更新步骤:确定所述当前组件存在要调用的下一组件,将所述下一组件更新为所述当前组件,重复执行所述判断处理步骤和所述确定更新步骤,直至所述组件检测集合中存在所述当前组件,或者所述当前组件不存在要调用的下一组件,输出检测结果。

可选地,所述组件调用关系包括至少一个组件的组件名称、起始组件标识和所述组件调用的下一组件;对所述组件调用关系中的组件进行组件可达性分析,包括:从所述组件调用关系中获取起始组件;其中,所述起始组件为所述起始组件标识为真的组件;将当前组件添加到组件可达集合,判断所述当前组件是否存在要调用的下一组件,如果所述当前组件存在要调用的下一组件,则将所述下一组件更新为所述当前组件,重复执行本步骤,直至所述当前组件不存在要调用的下一组件,确定不可达组件;其中,所述当前组件的初始值为所述起始组件,所述不可达组件为所述组件调用关系中的组件所构成的组件集合与所述组件可达集合的差集。

可选地,所述参数信息包括数据复用标识;所述根据所述调用依赖关系,调用所述组件实例对所述业务请求进行处理,包括:根据所述调用依赖关系,确定要调用的当前组件实例的数据复用标识;如果所述数据复用标识为真,则将之前调用所述当前组件实例所获取的数据输入下一组件实例;如果所述数据复用标识为假,则调用所述当前组件实例,将得到的返回数据输入所述下一组件实例;将所述下一组件实例更新为所述当前组件实例,重复执行上述步骤,直至最后一个组件实例,完成对所述业务请求的处理。

可选地,所述配置信息还包括数据转换信息,所述数据转换信息用于记录展示字段与所述处理结果的返回字段之间的对应关系;所述方法还包括:根据所述数据转换信息,将所述处理结果的返回字段转换为对应的展示字段,得到数据转换结果,展示所述数据转换结果。

可选地,所述方法还包括:扫描继承了抽象类的组件;以组件名称为键名,所述组件实例为对应的键值,将扫描到的组件添加到组件池。

为实现上述目的,根据本发明实施例的另一方面,提供了一种业务请求的处理装置。

本发明实施例的一种业务请求的处理装置,包括:获取模块,用于接收业务请求,根据所述业务请求中携带的业务标识,获取对应的配置信息;其中,所述配置信息包括组件调用关系;生成模块,用于查询所述组件调用关系中的组件对应的组件实例,根据所述组件调用关系,生成所述组件实例的调用依赖关系;其中,所述组件用于独立实现业务功能,包括从业务方法集中抽离出的业务方法;处理模块,用于根据所述调用依赖关系,调用所述组件实例对所述业务请求进行处理,得到处理结果。

可选地,所述组件调用关系包括至少一个组件的组件名称、起始组件标识和所述组件调用的下一组件;所述生成模块,还用于将起始组件添加到起始组件集合;其中,所述起始组件为所述起始组件标识为真的组件;遍历所述起始组件集合的起始组件,对于遍历到的起始组件执行以下处理,直至遍历结束,将最终的拼接结果作为组件实例的调用依赖关系:获取设置步骤:根据所述当前组件的组件名称,获取对应的组件实例,设置所述组件实例的参数信息,将所述组件实例拼接到上一轮循环获取的组件实例之后;其中,所述当前组件的初始值为所述起始组件;循环处理步骤:判断所述当前组件是否存在下一组件,如果所述当前组件存在所述下一组件,则将所述下一组件更新为所述当前组件,重复执行所述获取设置步骤和所述循环处理步骤,直至所述当前组件不存在所述下一组件,得到拼接结果。

可选地,所述装置还包括:检测模块,用于对所述组件调用关系中的组件进行检测;其中,所述检测包括循环依赖检测、组件可达性分析、组件存在检测、组件重复检测以及必填信息检测中的一种或者多种;所述循环依赖检测用于检测所述组件之间的调用是否存在循环依赖,所述组件可达性分析用于检测是否存在不可达组件,所述组件存在检测用于检测是否存在所述组件对应的组件实例,所述组件重复检测用于检测所述组件调用关系中是否存在相同组件,所述必填信息检测用于检测所述组件调用关系中是否包括设定的必填信息。

可选地,所述组件调用关系包括至少一个组件的组件名称、起始组件标识和所述组件调用的下一组件;所述检测模块,还用于从所述组件调用关系中获取起始组件,初始化组件检测集合;其中,所述起始组件为所述起始组件标识为真的组件;判断处理步骤:判断所述组件检测集合中是否存在当前组件,如果所述组件检测集合中不存在所述当前组件,则将所述当前组件添加到所述组件检测集合;其中,所述当前组件的初始值为所述起始组件;确定更新步骤:确定所述当前组件存在要调用的下一组件,将所述下一组件更新为所述当前组件,重复执行所述判断处理步骤和所述确定更新步骤,直至所述组件检测集合中存在所述当前组件,或者所述当前组件不存在要调用的下一组件,输出检测结果。

可选地,所述组件调用关系包括至少一个组件的组件名称、起始组件标识和所述组件调用的下一组件;所述检测模块,还用于从所述组件调用关系中获取起始组件;其中,所述起始组件为所述起始组件标识为真的组件;将当前组件添加到组件可达集合,判断所述当前组件是否存在要调用的下一组件,如果所述当前组件存在要调用的下一组件,则将所述下一组件更新为所述当前组件,重复执行本步骤,直至所述当前组件不存在要调用的下一组件,确定不可达组件;其中,所述当前组件的初始值为所述起始组件,所述不可达组件为所述组件调用关系中的组件所构成的组件集合与所述组件可达集合的差集。

可选地,所述参数信息包括数据复用标识;所述处理模块,还用于根据所述调用依赖关系,确定要调用的当前组件实例的数据复用标识;如果所述数据复用标识为真,则将之前调用所述当前组件实例所获取的数据输入下一组件实例;如果所述数据复用标识为假,则调用所述当前组件实例,将得到的返回数据输入所述下一组件实例;将所述下一组件实例更新为所述当前组件实例,重复执行上述步骤,直至最后一个组件实例,完成对所述业务请求的处理。

可选地,所述配置信息还包括数据转换信息,所述数据转换信息用于记录展示字段与所述处理结果的返回字段之间的对应关系;所述装置还包括:转换模块,用于根据所述数据转换信息,将所述处理结果的返回字段转换为对应的展示字段,得到数据转换结果,展示所述数据转换结果。

可选地,所述装置还包括:组件池构建模块,用于扫描继承了抽象类的组件;以组件名称为键名,所述组件实例为对应的键值,将扫描到的组件添加到组件池。

为实现上述目的,根据本发明实施例的再一方面,提供了一种电子设备。

本发明实施例的一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种业务请求的处理方法。

为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质。

本发明实施例的一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种业务请求的处理方法。

上述发明中的一个实施例具有如下优点或有益效果:通过将业务方法抽离成能够独立实现业务功能的组件,并配置组件调用关系,使得可以根据组件调用关系,自动生成组件实例的调用依赖关系,实现了模块化开发,降低了业务模块之间的耦合性,同时简化了开发流程,提高了开发效率。

根据组件调用关系中记录的组件信息,自动生成代码层面的实际调用依赖关系,在新增业务时,只需配置组件调用关系即可,无需如现有技术手动编写调用关系,简化开发流程,避免了相似逻辑的重复开发。通过对组件进行循环依赖检测,避免调用产生死循环。通过对组件进行组件可达性分析,检测出无法被调用的组件,以便在执行请求之前对组件调用关系进行修改。

通过配置数据复用标识,决定是否再次调用同一接口来获取数据,使得可以减少接口重复调用,节约服务器资源。通过配置数据转换信息,实现了返回字段的自动转换,灵活性好,进一步提高开发效率。所有组件继承自抽象类,使得可以使用统一逻辑扫描得到所有组件,且方便统一管理,避免重复编写相同的属性和方法。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的业务请求的处理方法的主要步骤的示意图;

图2是根据本发明实施例的业务请求的处理方法的主要流程示意图;

图3是本发明实施例的数据转换配置页面示意图;

图4是本发明实施例的新增/编辑业务标识页面示意图;

图5是本发明实施例的新增/编辑字段页面示意图;

图6是本发明实施例的组件调用图谱配置页面示意图;

图7是本发明实施例的新增/编辑调用图谱页面示意图一;

图8是本发明实施例的新增/编辑调用图谱页面示意图二;

图9是本发明实施例的对组件进行循环依赖检测的主要流程示意图;

图10是本发明实施例的对组件进行组件可达性分析的主要流程示意图;

图11是本发明实施例的生成调用依赖关系的主要流程示意图;

图12是根据本发明实施例的业务请求的处理装置的主要模块的示意图;

图13是本发明实施例可以应用于其中的示例性系统架构图;

图14是适用于来实现本发明实施例的电子设备的计算机装置的结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1是根据本发明实施例的业务请求的处理方法的主要步骤的示意图。如图1所示,本发明实施例的业务请求的处理方法,主要包括如下步骤:

步骤S101:接收业务请求,根据所述业务请求中携带的业务标识,获取对应的配置信息。预先在配置页面为业务填写配置信息,该配置信息包括用于记录组件之间调用关系的组件调用关系。实施例中,组件调用关系可以包括至少一个组件的组件名称、起始组件标识和该组件调用的下一组件。在接收到业务请求后,使用该请求中携带的业务标识,在配置页面查询对应的配置信息。

步骤S102:查询所述组件调用关系中的组件对应的组件实例,根据所述组件调用关系,生成所述组件实例的调用依赖关系。在应用启动时,扫描继承了抽象类的组件,以组件名称为键名、组件实例为对应的键值,将扫描到的组件添加到组件池。其中,所述组件用于独立实现业务功能,包括从业务方法集中抽离出的业务方法。

在获取到组件调用关系后,将组件调用关系中包含的起始组件添加到起始组件集合,之后遍历该起始组件集合,每遍历到一个起始组件,则根据当前组件的组件名称从组件池获取对应的组件实例,设置该组件实例的参数信息,然后获取当前组件的下一组件,以同样的方式获取该下一组件的组件实例,设置该组件实例的参数信息,并将该下一组件的组件实例拼接到当前组件的组件实例之后,循环此过程,直至所有组件遍历结束,最终的拼接结果即调用依赖关系。

步骤S103:根据所述调用依赖关系,调用所述组件实例对所述业务请求进行处理,得到处理结果。从起始组件的组件实例开始,按照调用依赖关系依次调用执行各组件实例,当存在多个起始组件时,起始组件之间可以并行调用,进而完成对业务请求的处理,返回处理结果。

图2是根据本发明实施例的业务请求的处理方法的主要流程示意图。如图2所示,本发明实施例的业务请求的处理方法,主要包括如下步骤:

步骤S201:接收业务请求,根据业务请求中携带的业务标识,从配置中心获取对应的配置信息,解析配置信息。实施例中,配置信息包括组件调用关系和数据转换信息,可以存储在缓存和数据库中。其中,数据转换信息中记录展示字段与处理结果的返回字段之间的对应关系,用于将服务器内部使用的字段转换为前端展示的字段。

由于服务器内部的一些字段属于敏感字段,不便于直接展示在用户页面上,因此可以通过配置数据转换信息来确定哪些字段可以直接展示,哪些字段需要屏蔽。另外,在展示字段有变动时(比如新增、更改某些字段),导致展示字段与返回字段对应不上时,也可以通过配置数据转换信息来对应调整。

实施例中,配置信息在配置中心的配置页面设置,该配置页面包括数据转换配置页面和组件调用图谱配置页面,数据转换配置页面用于配置数据转换信息,组件调用图谱配置页面用于配置组件调用关系。下面结合附图对数据转换配置页面和组件调用图谱配置页面进行详细说明。

图3是本发明实施例的数据转换配置页面示意图,图4是本发明实施例的新增/编辑业务标识页面示意图,图5是本发明实施例的新增/编辑字段页面示意图。

参见图3,在“数据转换配置”页面点击“新增”按钮,弹出图4所示的“新增/编辑业务标识”页面,在此页面上输入业务标识(用于唯一标识一个业务)和业务方法名称,点击“保存”按钮,完成业务标识维度的配置。在“新增/编辑业务标识”页面点击“新增字段”按钮,弹出图5的“新增/编辑字段”窗口,在该窗口输入对应的展示字段和服务器内部使用的组件字段(即返回字段)的对应关系,点击“保存”按钮,完成字段配置并自动关闭窗口。至此完成数据转换信息配置。

在“数据转换配置”页面点击“发布”按钮,会校验业务标识是否存在重复数据,校验通过后,将配置的数据转换信息保存到数据库。保存成功后,再将数据转换信息以map的形式存储到Redis缓存中,其中,key(键名)为业务标识,value(键值)为展示字段和返回字段的对应关系。在需要查询数据转换信息时,可以在“数据转换配置”页面的搜索框输入业务标识,点击“搜索”按钮后,即可查询出对应的value。

图6是本发明实施例的组件调用图谱配置页面示意图,图7是本发明实施例的新增/编辑调用图谱页面示意图一,图8是本发明实施例的新增/编辑调用图谱页面示意图二。

参见图6,在“组件调用图谱配置”页面点击“新增图片”按钮,弹出图7、图8所示的“新增/编辑调用图谱”页面,在此页面上输入业务标识、图谱名称和组件调用关系图谱(即以图像形式展示组件调用关系),点击“保存”按钮,完成组件调用关系配置。

实施例在点击“保存”按钮后,会校验业务标识是否存在重复数据,校验通过后,将配置的数据保存到数据库。保存成功后,再将数据以map的形式存储到Redis缓存中,其中,key为业务标识,value为组件调用关系图谱。在需要查询组件调用关系图谱时,可以在“组件调用图谱配置”页面的搜索框输入业务标识,点击“搜索”按钮后,即可查询出对应的value。

可以理解的是,图7、图8中矩形框内、流程图样式的组件调用关系图谱仅为了方便展示,实施例中,组件调用关系图谱是通过JSON格式的字符串实现的。具体实现代码可以如下:

上述代码以“查询用户信息”这一业务场景为例,对组件调用关系图谱进行了说明。该代码中“componentClassName”为组件名称,“startComponent”为起始组件标识(标识该组件是否为起始组件),“reUseResult”为数据复用标识(标识是否复用前面组件的调用结果),“nextComponents”为该组件要调用的下一组件。

该代码对应的组件调用关系图谱包括3个组件,分别为queryNameComponent、queryAgeComponent和convertDateComponent。其中,queryNameComponent和convertDateComponent为起始组件,三个组件均可以复用前面组件的调用结果,queryNameComponent、queryAgeComponent要调用的下一组件均为convertDateComponent。

当接收到业务请求后,可以根据业务请求中携带的业务标识,从缓存中拉取对应的组件调用关系图谱和数据转换信息,并将JSON字符串格式的组件调用关系图谱解析为Java对象,方便服务器内部使用。实施例中,可以使用fastJson、jackJson等工具包实现对JSON字符串的解析。解析后的组件调用关系图谱可以存储到Java集合。

步骤S202:对解析后的组件调用关系中的组件进行检测。该步骤用于对Java对象格式的组件调用关系中的组件进行检测。实施例中,从业务原有的业务方法集中抽离部分业务方法构成组件。每个组件包括一个或者多个业务方法,是对原有业务方法封装得到(目的是便于被Spring框架管理),能够独立实现业务功能,各个组件内部不存在调用其他组件的情况,以降低业务模块之间的耦合性。

比如,如果需要查询订单详情,则可以把查询订单详情的方法queryOrderInfo,抽象为查询订单详情的组件orderInfoComponent。再比如,如果除了需要获取订单详情,还需要查询运单轨迹,则可以把查询订单详情的方法queryOrderInfo和查询运单轨迹queryOrderTrack这两个方法抽离到同一个组件中。具体抽离哪些方法由业务场景而定,但要保证抽离形成的组件是通用的,即除了在本业务场景使用,也可以在其他业务场景使用。

在一可选的实施例中,该检测可以包括循环依赖检测、组件可达性分析、组件存在检测、组件重复检测以及必填信息检测中的一种或者多种。下面对各种检测进行详细说明。

(1)循环依赖检测用于检测组件之间的调用是否存在循环依赖。如果不存在循环依赖,则循环依赖检测通过;否则,循环依赖检测失败。

比如,组件调用关系为:组件A→组件B→组件C→组件A,“→”表示调用,由上述组件调用关系可知,调用从组件A开始,也从组件A结束,产生调用死循环,导致用户无法获得服务器响应。循环依赖检测的具体实现参见图9。

(2)组件可达性分析用于检测是否存在不可达组件。如果组件调用关系包含的所有组件均可达,则组件可达性分析通过;如果存在不可达组件,则组件可达性分析失败。

比如,组件调用关系为:组件A→组件B→组件C,组件D→组件E,且调用从组件A开始,由该组件调用关系可知,由于组件C和组件D之间没有调用关系,导致调用无法到达组件D和组件E。组件D和组件E即为不可达组件。组件可达性分析的具体实现参见图10。

(3)组件存在检测用于检测组件池中是否存在组件对应的组件实例。该检测的具体实现可以为:根据组件名称,从组件池中获取对应的组件实例,如果能够获取到组件实例,说明组件存在,组件存在检测通过;否则,说明组件不存在,组件存在检测失败。

(4)组件重复检测用于检测组件调用关系中是否存在相同组件。该检测的具体实现可以为:判断组件调用关系图谱中是否存在组件名称相同的组件,如果存在组件名称相同的组件,则说明存在重复组件,组件重复检测失败,可以返回重复提示;否则说明不存在重复组件,组件重复检测通过。

(5)必填信息检测用于检测组件调用关系中是否包括设定的必填信息。由于在获取组件实例时,需要通过组件名称获取,故组件调用关系中组件名称为必填信息。而且,起始组件作为调用入口,也为必填信息。实施例中,该检测即检测组件调用关系中是否包括组件名称和起始组件,如果包括这两项内容,则必填信息检测通过;否则,必填信息检测失败。

步骤S203:检测通过后,从组件池中获取组件对应的组件实例,根据组件调用关系,生成组件实例的调用依赖关系。实施例中,所有组件(为Java类)均继承自抽象类(AbstractWorker类)。AbstractWorker类抽象了所有类型的workers共有的属性和方法。该处理便于后续使用统一的逻辑扫描所有组件,而且所有的组件都有共有的方法和属性,方便统一管理以及避免重复编写相同的属性和方法。

应用启动后,Java虚拟机会根据编译器编译生产的.class文件,创建对应的Java实例。在实例化过程中,可以使用Spring框架的AOP切面扫描判断该类的父类是否为AbstractWorker类,如果其父类是AbstractWorker类,则将该类添加到组件池。实施例中,组件池为map集合,key为组件名称,value为对应的组件实例。组件实例是指Java类的实例。

其中,Spring框架是一个应用程序框架。AOP是Aspect Oriented Programming的缩写,意为:面向切面编程,它是通过预编译方式和运行期间动态代理,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

全部检测通过后,根据组件名称,从组件池中获取对应的组件实例。之后根据组件调用关系,动态地生成组件实例的调用依赖关系。即生成代码层面的实际的依赖关系。具体实现参见图11。

步骤S204:根据调用依赖关系,调用组件实例对业务请求进行处理,得到处理结果。根据实际的调用依赖关系,依次调用执行。当有多个起始组件时,起始组件之间并行调用,执行结束后得到处理结果。

在一优选的实施例中,在执行过程中,可以根据调用依赖关系中的数据复用标识(reUseResult),决定是否再次调用组件来获取数据(前提是前序组件中存在当前组件需要的数据)。如果reUseResult为ture,则使用之前请求获取到的数据,不再额外发送请求;否则,向接口发送获取数据的请求。

具体地,根据调用依赖关系,确定要调用的当前组件实例的reUseResult;如果reUseResult为ture,则将之前调用当前组件实例所获取的数据输入下一组件实例;否则,调用当前组件实例,将得到的返回数据输入下一组件实例;将下一组件实例更新为当前组件实例,重复执行该过程,直至最后一个组件实例,完成对业务请求的处理。

步骤S205:根据数据转换信息,将处理结果的返回字段转换为对应的展示字段,得到数据转换结果,展示数据转换结果。该步骤用于根据配置的数据转换信息,将处理结果的返回字段转换为对应的展示字段。具体地,遍历服务器中组件对象的组件字段,根据展示字段和组件字段的对应关系,将服务器的组件字段转换为展示字段,最后返回数据转换结果给用户。

图9是本发明实施例的对组件进行循环依赖检测的主要流程示意图。如图9所示,本发明实施例的对组件进行循环依赖检测的过程,主要包括如下步骤:

步骤S901:从组件调用关系中获取起始组件,初始化组件检测集合。从组件调用关系中获取reUseResult为ture的组件作为起始组件,并初始化组件检测集合为空集。如果有多个起始组件,则各个起始组件并行向下执行。

获取到起始组件后,从起始组件开始,根据组件调用关系遍历组件。对遍历到的组件执行以下处理。

步骤S902:判断组件检测集合中是否存在当前组件,如果组件检测集合中不存在当前组件,则执行步骤S903;否则,执行步骤S905。其中,当前组件的初始值为起始组件。

步骤S903:将当前组件添加到组件检测集合。

步骤S904:根据组件调用关系,确定当前组件存在要调用的下一组件,将下一组件更新为当前组件,执行步骤S902。根据组件调用关系,判断当前组件的组件信息中是否存在nextComponents,如果存在,则说明当前组件存在下一组件。

步骤S905:输出检测结果。假设经过多次循环后,组件检测集合包含的组件依次为:组件A、组件B、组件C,组件C调用的下一组件为组件A,则说明存在循环依赖,可以输出循环依赖检测失败的提示信息,同时可以从组件检测集合的第一个组件开始,输出存在的环链路A→B→C→A。

可以理解的是,如果组件检测集合中不存在当前组件,且当前组件不存在要调用的下一组件,说明不存在循环依赖,可以输出循环依赖检测通过的提示信息。

图10是本发明实施例的对组件进行组件可达性分析的主要流程示意图。如图10所示,本发明实施例的对组件进行组件可达性分析的过程,主要包括如下步骤:

步骤S1001:从组件调用关系中获取起始组件,初始化组件可达集合。从组件调用关系中获取reUseResult为true的组件作为起始组件,并初始化组件可达集合为空集。如果有多个起始组件,则各个起始组件并行向下执行。

获取到起始组件后,从起始组件开始,根据组件调用关系遍历组件。对遍历到的组件执行以下处理。

步骤S1002:将当前组件添加到组件可达集合。添加到组件可达集合的组件可称为可达组件。

步骤S1003:判断当前组件是否存在要调用的下一组件,如果当前组件存在要调用的下一组件,则执行步骤S1004;否则,执行步骤S1005。根据组件调用关系,判断当前组件的组件信息中是否存在nextComponents,如果存在,则说明当前组件存在下一组件。

步骤S1004:将下一组件更新为当前组件,执行步骤S1002。

步骤S1005:确定不可达组件。不可达组件为组件调用关系中的组件所构成的组件集合与组件可达集合的差集。

图11是本发明实施例的生成调用依赖关系的主要流程示意图。如图11所示,本发明实施例的生成调用依赖关系的过程,主要包括如下步骤:

步骤S1101:从组件调用关系中获取起始组件,将起始组件添加到起始组件集合。从组件调用关系中获取reUseResult为true的组件作为起始组件,将起始组件添加到起始组件集合。

步骤S1102:遍历起始组件集合的起始组件,将遍历到的起始组件作为当前组件。

步骤S1103:根据当前组件的组件名称,获取对应的组件实例,设置组件实例的参数信息,将组件实例拼接到上一轮循环获取的组件实例之后。根据当前组件的组件名称,从组件池获取对应的组件实例。之后根据组件调用关系,配置组件实例的参数信息。实施例中,参数信息可以包括组件入参、组件名称、数据复用标识等。

下面对拼接过程进行举例说明。假设第一次循环从组件池中获取的组件实例为实例A,第二次循环从组件池获取的组件实例为实例B,则将实例B拼接到实例A之后。

步骤S1104:判断当前组件是否存在下一组件,如果当前组件存在下一组件,则执行步骤S1105;否则,执行步骤S1106。根据组件调用关系,判断当前组件的组件信息中是否存在nextComponents,如果存在,则说明当前组件存在下一组件。

步骤S1105:将下一组件更新为当前组件,执行步骤S1103。

步骤S1106:判断起始组件集合的起始组件是否遍历结束,如果未遍历结束,则执行步骤S1102;否则,执行步骤S1107。

步骤S1107:将最终的拼接结果作为组件实例的调用依赖关系进行输出。

图12是根据本发明实施例的业务请求的处理装置的主要模块的示意图。如图12所示,本发明实施例的业务请求的处理装置600,主要包括:

获取模块1201,用于接收业务请求,根据所述业务请求中携带的业务标识,获取对应的配置信息。预先在配置页面为业务填写配置信息,该配置信息包括用于记录组件之间调用关系的组件调用关系。实施例中,组件调用关系可以包括至少一个组件的组件名称、起始组件标识和该组件调用的下一组件。在接收到业务请求后,使用该请求中携带的业务标识,在配置页面查询对应的配置信息。

生成模块1202,用于查询所述组件调用关系中的组件对应的组件实例,根据所述组件调用关系,生成所述组件实例的调用依赖关系。在应用启动时,扫描继承了抽象类的组件,以组件名称为键名、组件实例为对应的键值,将扫描到的组件添加到组件池。其中,所述组件用于独立实现业务功能,包括从业务方法集中抽离出的业务方法。

在获取到组件调用关系后,将组件调用关系中包含的起始组件添加到起始组件集合,之后遍历该起始组件集合,每遍历到一个起始组件,则根据当前组件的组件名称从组件池获取对应的组件实例,设置该组件实例的参数信息,然后获取当前组件的下一组件,以同样的方式获取该下一组件的组件实例,设置该组件实例的参数信息,并将该下一组件的组件实例拼接到当前组件的组件实例之后,循环此过程,直至所有组件遍历结束,最终的拼接结果即调用依赖关系。

处理模块1203,用于根据所述调用依赖关系,调用所述组件实例对所述业务请求进行处理,得到处理结果。从起始组件的组件实例开始,按照调用依赖关系依次调用执行各组件实例,当存在多个起始组件时,起始组件之间可以并行调用,进而完成对业务请求的处理,返回处理结果。

另外,本发明实施例的业务请求的处理装置1200还可以包括:检测模块、转换模块和组件池构建模块(图12中未示出)。

检测模块,用于对所述组件调用关系中的组件进行检测;其中,所述检测包括循环依赖检测、组件可达性分析、组件存在检测、组件重复检测以及必填信息检测中的一种或者多种;所述循环依赖检测用于检测所述组件之间的调用是否存在循环依赖,所述组件可达性分析用于检测是否存在不可达组件,所述组件存在检测用于检测是否存在所述组件对应的组件实例,所述组件重复检测用于检测所述组件调用关系中是否存在相同组件,所述必填信息检测用于检测所述组件调用关系中是否包括设定的必填信息。

转换模块,用于根据所述数据转换信息,将所述处理结果的返回字段转换为对应的展示字段,得到数据转换结果,展示所述数据转换结果。组件池构建模块,用于扫描继承了抽象类的组件;以组件名称为键名,所述组件实例为对应的键值,将扫描到的组件添加到组件池。

从以上描述可以看出,通过将业务方法抽离成能够独立实现业务功能的组件,并配置组件调用关系,使得可以根据组件调用关系,自动生成组件实例的调用依赖关系,实现了模块化开发,降低了业务模块之间的耦合性,同时简化了开发流程,提高了开发效率。

图13示出了可以应用本发明实施例的业务请求的处理方法或业务请求的处理装置的示例性系统架构1300。

如图13所示,系统架构1300可以包括终端设备1301、1302、1303,网络1304和服务器1305。网络1304用以在终端设备1301、1302、1303和服务器1305之间提供通信链路的介质。网络1304可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备1301、1302、1303通过网络1304与服务器1305交互,以接收或发送消息等。终端设备1301、1302、1303可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器1305可以是提供各种服务的服务器,例如对管理员利用终端设备1301、1302、1303发送的业务请求进行处理的后台管理服务器。后台管理服务器可以获取配置信息,查询组件实例,生成调用依赖关系,对业务请求进行处理,并将处理结果反馈给终端设备。

需要说明的是,本申请实施例所提供的业务请求的处理方法一般由服务器1305执行,相应地,业务请求的处理装置一般设置于服务器1305中。

应该理解,图13中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

根据本发明的实施例,本发明还提供了一种电子设备和一种计算机可读介质。

本发明的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种业务请求的处理方法。

本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种业务请求的处理方法。

下面参考图14,其示出了适用于来实现本发明实施例的电子设备的计算机系统1400的结构示意图。图14示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图14所示,计算机系统1400包括中央处理单元(CPU)1401,其可以根据存储在只读存储器(ROM)1402中的程序或者从存储部分1408加载到随机访问存储器(RAM)1403中的程序而执行各种适当的动作和处理。在RAM 1403中,还存储有计算机系统1400操作所需的各种程序和数据。CPU 1401、ROM 1402以及RAM 1403通过总线1404彼此相连。输入/输出(I/O)接口1405也连接至总线1404。

以下部件连接至I/O接口1405:包括键盘、鼠标等的输入部分1406;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1407;包括硬盘等的存储部分1408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1409。通信部分1409经由诸如因特网的网络执行通信处理。驱动器1410也根据需要连接至I/O接口1405。可拆卸介质1411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1410上,以便于从其上读出的计算机程序根据需要被安装入存储部分1408。

特别地,根据本发明公开的实施例,上文主要步骤图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1409从网络上被下载和安装,和/或从可拆卸介质1411被安装。在该计算机程序被中央处理单元(CPU)1401执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取模块、生成模块和处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“接收业务请求,根据所述业务请求中携带的业务标识,获取对应的配置信息的模块”。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收业务请求,根据所述业务请求中携带的业务标识,获取对应的配置信息;其中,所述配置信息包括组件调用关系;查询所述组件调用关系中的组件对应的组件实例,根据所述组件调用关系,生成所述组件实例的调用依赖关系;其中,所述组件用于独立实现业务功能,包括从业务方法集中抽离出的业务方法;根据所述调用依赖关系,调用所述组件实例对所述业务请求进行处理,得到处理结果。

上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

相关技术
  • 业务请求处理方法及装置、和业务请求方法及装置
  • 业务请求处理及支付业务请求处理方法和装置
技术分类

06120113284360