CN113448698B - 业务模块相互调用的实现方法、装置、设备及存储介质 - Google Patents
业务模块相互调用的实现方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113448698B CN113448698B CN202011552268.8A CN202011552268A CN113448698B CN 113448698 B CN113448698 B CN 113448698B CN 202011552268 A CN202011552268 A CN 202011552268A CN 113448698 B CN113448698 B CN 113448698B
- Authority
- CN
- China
- Prior art keywords
- program
- service module
- container
- service
- module
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000010276 construction Methods 0.000 claims description 33
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004806 packaging method and process Methods 0.000 claims description 7
- 238000005538 encapsulation Methods 0.000 claims description 4
- 230000003993 interaction Effects 0.000 abstract description 16
- 238000004891 communication Methods 0.000 abstract description 9
- 238000011161 development Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000012827 research and development Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000010354 integration Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本申请提出一种业务模块相互调用的实现方法、装置、设备及存储介质,该方法包括:当执行第一业务模块的调用方程序时,调用桥接组件;通过桥接组件判断调用方程序所需调用的第二业务模块的被调用方程序是否存在;若被调用方程序存在,通过桥接组件调用第二业务模块的被调用方程序。本申请将各模块的调用方程序的程序指针均指向桥接组件的消息总线服务,将各模块的被调用方程序均写入桥接组件的注册表。桥接组件使各模块之间的关联关系条理有序,使应用程序具有了跨模块通信的能力。各模块间相互独立,将任意模块从应用程序的主工程中抽离,都不会影响其他模块执行。实现多模块无依赖并行开发及对代码权限的分级管理。
Description
技术领域
本申请属于应用程序开发技术领域,具体涉及一种业务模块相互调用的实现方法、装置、设备及存储介质。
背景技术
随着移动终端业务的拓展与丰富,面向移动终端的应用程序的功能越来越丰富。应用程序的功能依赖于组成该应用程序的各业务模块,多个业务模块之间存在错综复杂的关联关系,如某一业务模块调用其他业务模块中的方法或跳转到其他业务模块的页面等。
相关技术中,通常在业务纬度上把应用程序划分成多个小的业务模块,每一个业务模块都分别在独立的工程中研发,各业务模块研发完成后再把各业务模块的构建产物整合到主工程中,构建出完整的应用程序。
但上述相关技术中各业务模块间之间的关联关系杂乱无章,若从主工程中把某个业务模块抽离出来,不仅这个业务模块无法独立运行,而且主工程中其他与该业务模块之间存在关联关系的业务模块也将无法正常运行。业务模块的独立性很差,模块间整合难度很大,应用程序的构建效率很低。
发明内容
本申请提出一种业务模块相互调用的实现方法、装置、设备及存储介质,在应用程序中设置了桥接组件,通过桥接组件实现业务模块之间的相互调用。桥接组件使各模块之间的关联关系条理有序,使应用程序具有了跨模块通信的能力。各模块间相互独立,将任意模块从应用程序的主工程中抽离,都不会影响其他模块执行。实现多模块无依赖并行开发及对代码权限的分级管理。
本申请第一方面实施例提出了一种业务模块相互调用的实现方法,包括:
当执行第一业务模块的调用方程序时,调用桥接组件;
通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在;
若所述被调用方程序存在,则通过所述桥接组件调用所述第二业务模块中的所述被调用方程序。
在本申请的一些实施例中,所述桥接组件中包括消息总线服务和注册表;所述通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在;若所述被调用方程序存在,则通过所述桥接组件调用所述第二业务模块中的所述被调用方程序,包括:
通过所述消息总线服务查找所述注册表中是否包含所述调用方程序所需调用的第二业务模块中的被调用方程序;
若所述注册表中包含所述被调用方程序,则通过所述消息总线服务调用所述第二业务模块中的所述被调用方程序。
在本申请的一些实施例中,所述通过所述消息总线服务查找所述注册表中是否包含所述调用方程序所需调用的第二业务模块中的被调用方程序,包括:
通过所述消息总线服务获取所述调用方程序所需调用的第二业务模块的模块标识和被调用方标识;
根据所述模块标识,查询所述注册表中是否包含所述调用方程序所需调用的第二业务模块对应的第一程序容器,所述第一程序容器中封装有所述第二业务模块包括的所有被调用方程序;
若所述注册表中包含所述第二业务模块对应的第一程序容器,则判断所述第一程序容器中是否包括所述被调用方标识对应的被调用方程序;
若所述第一程序容器中包括所述被调用方标识对应的被调用方程序,则执行通过所述消息总线服务调用所述被调用方程序的操作。
在本申请的一些实施例中,所述方法还包括:
若所述注册表中不包含所述第二业务模块对应的第一程序容器,或,所述第一程序容器中不包括所述被调用方标识对应的被调用方程序,则调用所述第一业务模块中所述调用方程序对应的预设被调用程序。
在本申请的一些实施例中,所述通过所述消息总线服务调用所述第二业务模块中的所述被调用方程序,包括:
获取所述调用方程序对应的业务参数;
通过所述消息总线服务将所述业务参数传输给所述第二业务模块中的所述被调用方程序,以在所述第二业务模块中根据所述业务参数执行所述被调用方程序;
获取所述被调用方程序的执行结果,通过所述消息总线服务将所述执行结果传输给所述调用方程序。
在本申请的一些实施例中,所述执行第一业务模块的调用方程序之前,还包括:
将所述第一业务模块中包括的所有被调用方程序封装在第一程序容器中,所述第一业务模块为应用程序包括的任一业务模块;
将第一业务模块中包括的所有调用方程序封装在第二程序容器中;
通过宏定义声明所述第一程序容器及所述第一业务模块包括的每个被调用方程序;
通过宏定义声明所述第二程序容器及所述第一业务模块包括的每个调用方程序。
在本申请的一些实施例中,所述方法还包括:
在编译所述应用程序时,将声明的所述第一程序容器及所述每个被调用方程序收集在所述第一业务模块对应的构建文件中;
将声明的所述第二程序容器及所述每个调用方程序收集在所述构建文件中。
在本申请的一些实施例中,所述将声明的所述第一程序容器及所述每个被调用方程序收集在所述第一业务模块对应的构建文件中,包括:
建立所述第一业务模块的模块标识与声明的所述第一程序容器之间的绑定关系;
通过预设数据结构建立声明的所述第一程序容器与声明的每个被调用方程序之间的绑定关系;
将建立绑定关系后的所述第一程序容器写入所述第一业务模块对应的构建文件中。
在本申请的一些实施例中,所述将声明的所述第二程序容器及所述每个调用方程序收集在所述构建文件中,包括:
通过预设数据结构建立声明的所述第二程序容器与声明的每个调用方程序之间的绑定关系;
分别为所述每个调用方程序设置其所需调用的第二业务模块的模块标识及被调用方程序的被调用方标识,所述第二业务模块为与所述第一业务模块之间存在相互调用关系的业务模块;
将声明的所述第二程序容器写入所述第一业务模块对应的构建文件中。
在本申请的一些实施例中,所述方法还包括:
在启动所述应用程序时,从每个业务模块对应的构建文件中分别获取每个业务模块的第一程序容器和第二程序容器;
将每个业务模块的第二程序容器中每个调用方程序的程序地址均调整为指向所述桥接组件中的消息总线服务;
将每个业务模块的第一程序容器均写入所述桥接组件包括的注册表中。
本申请第二方面的实施例提供了一种业务模块相互调用的实现装置,包括:
桥接组件调用模块,用于当执行第一业务模块的调用方程序时,调用桥接组件;
判断模块,用于通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在;
调用模块,用于若所述被调用方程序存在,则通过所述桥接组件调用所述第二业务模块中的所述被调用方程序。
本申请第三方面的实施例提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序以实现上述第一方面所述的方法。
本申请第四方面的实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行实现上述第一方面所述的方法。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
在本申请实施例中,将业务模块中的被调用方程序封装在第一程序容器中,将被调用方程序封装在第二程序容器中。并在编译时将第一程序容器和第二程序容器收集在业务模块的构建文件中。在应用程序中设置了桥接组件,在启动应用程序时将各业务模块的调用方程序的程序指针均指向桥接组件中的消息总线服务,将各业务模块的第一程序容器均写入桥接组件中的注册表中。任意具有相互调用关系的业务模块都可以通过该桥接组件实现模块间的程序调用。通过桥接组件使各业务模块之间的关联关系条理有序,使应用程序具有了跨模块通信的能力。各业务模块之间相互独立,将任意业务模块从应用程序的主工程中抽离,都不会影响其他业务模块的执行。实现多业务模块无依赖并行开发,研发人员无需把时间浪费在自己不关心的业务逻辑的构建上,且能实现对代码权限的分级管理。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变的明显,或通过本申请的实践了解到。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本申请一实施例所提供的业务模块的组成示意图;
图2示出了本申请一实施例所提供的启动时将各业务模块在桥接组件中整合绑定的示意图;
图3示出了本申请一实施例所提供的一种业务模块相互调用的实现方法的流程示意图;
图4示出了本申请一实施例所提供的业务模块中face容器和callout容器在编译、启动及运行时的操作示意图;
图5示出了本申请一实施例所提供的模块间通过桥接组件进行调用的示意图;
图6示出了本申请一实施例所提供的一种业务模块相互调用的实现方法的流程示意图;
图7示出了本申请一实施例所提供的一种业务模块相互调用的实现装置的结构示意图;
图8示出了本申请一实施例所提供的一种电子设备的结构示意图;
图9示出了本申请一实施例所提供的一种存储介质的示意图。
具体实施方式
下面将参照附图更详细地描述本申请的示例性实施方式。虽然附图中显示了本申请的示例性实施方式,然而应当理解,可以以各种形式实现本申请而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本申请,并且能够将本申请的范围完整的传达给本领域的技术人员。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。
下面结合附图来描述根据本申请实施例提出的一种业务模块相互调用的实现方法、装置、设备及存储介质。
目前面向移动终端的应用程序的功能越来越丰富,在开发应用程序时通常按照业务逻辑将应用程序划分成多个业务模块,每个业务模块分别由不同的研发团队独立开发。各业务模块研发完成之后再将各业务模块的构建文件整合到该应用程序的主工程中,构建出完整的应用程序。
但由于相关技术中各业务模块之间存在错综复杂的关联关系,若从主工程中把某个业务模块抽离出来,通常会使其他与该业务模块之间存在关联关系的业务模块无法正常运行,甚至使应用程序的主工程都构建失败。因此相关技术中业务模块的独立性很差,模块间整合难度很大,导致应用程序的构建效率很低。
本申请实施例提供了一种业务模块相互调用的实现方法,该方法分别对业务模块中调用其他业务模块的调用方程序和被其他业务模块调用的被调用方程序进行了封装,设置了桥接组件,将各业务模块的调用方程序的程序指针均指向桥接组件中的消息总线服务,以及将各业务模块中封装被调用方程序的第一程序容器均写入桥接组件中的注册表中。任意具有相互调用关系的业务模块都可以通过该桥接组件实现模块间的程序调用。该方法通过桥接组件来建立模块间的关联关系,使各业务模块之间的关联关系条理有序,使应用程序具有了跨模块通信的能力。通过该桥接组件使各业务模块之间相互独立,可以实现多团队无依赖并行开发,每个团队开发各自的业务模块,不需要再把时间浪费在自己不关心的业务逻辑的构件上,而且在此基础上可以实现对代码权限进行分级管理。
在本申请实施例中,按照业务逻辑将应用程序划分为多个业务模块,由不同的研发团队在相互独立的工程中分别开发各业务模块。业务模块可能与其他业务模块存在关联关系,关联关系可以包括调用和被调用两类。本申请实施例将业务模块中需要调用其他业务模块的程序称为调用方程序,将被其他业务模块调用的程序称为被调用方程序。对于应用程序包括的每个业务模块,其处理方式都是相同的,本申请实施例以第一业务模块为例进行说明,第一业务模块为应用程序包括的任一业务模块。
在第一业务模块开发时将第一业务模块中包括的所有被调用方程序梳理出来,并封装在第一程序容器中。将第一业务模块中包括的所有调用方程序梳理出来,并封装在第二程序容器中。为了便于描述本申请实施例将第一程序容器称为face容器,将第二程序容器称为callout容器。
通过上述方式对业务模块中的调用方程序和被调用方程序分别进行封装之后,如图1所示,业务模块的组成包括face容器、主体逻辑和callout容器。其中,callout容器需要调用其他业务模块中的face容器,而该业务模块中的face容器则被其他业务模块中的callout容器调用。其中,主体逻辑为业务模块的程序代码。
本申请实施例还在第一业务模块中通过宏定义分别对face容器、callout容器、每个调用方程序及每个被调用方程序进行声明。其中,声明的face容器中包括每个被调用方程序对应的被调用方标识,被调用方标识可以为被调用方程序的名称。声明的每个被调用方程序中包括每个被调用方程序的被调用方标识及程序主体。声明的callout容器中包括每个调用方程序对应的调用方标识,调用方标识可以为调用方程序的名称。声明的每个调用方程序中包括每个调用方程序的调用方标识及程序主体。其中,可以以数据类型classstring类型在face容器中声明所有被调用方程序,以及在callout容器中声明所有调用方程序。
例如,通过宏定义SY_FACE_EXPORT来进行face容器声明,通过宏定义SY_CALLOUT_EXPORT来进行callout容器声明,通过宏定义SY_FACE_METHOD来进行被调用方程序的声明,通过宏定义SY_CALLOUT_METHOD来进行调用方程序的声明。
对于应用程序的各个业务模块,都通过上述方式对业务模块中的调用方程序和被调用方程序进行封装,并通过宏定义对封装得到的程序容器及每个调用方程序和每个被调用方程序进行声明。各业务模块完成源程序的编写之后,对该应用程序各业务模块的源程序进行编译。
由于各业务模块中都通过宏定义对封装得到的程序容器及每个调用方程序和每个被调用方程序进行了声明,因此在编译过程中能够自动收集每个业务模块的调用方程序和被调用方程序。以第一业务模块来说,第一业务模块为应用程序中的任一业务模块。在编译应用程序中的第一业务模块时,将声明的第一程序容器及每个被调用方程序收集在第一业务模块对应的构建文件中;将声明的第二程序容器及每个调用方程序收集在第一业务模块对应的构建文件中。
具体地,在编译第一业务模块时,建立第一业务模块的模块标识与声明的第一程序容器之间的绑定关系;通过预设数据结构建立声明的第一程序容器与声明的每个被调用方程序之间的绑定关系;将建立绑定关系后的第一程序容器写入第一业务模块对应的构建文件中。构建文件为能够被计算机识别的二进制文件,该构建文件相当于第一业务模块的安装文件。
在编译第一业务模块时,还通过预设数据结构建立声明的第二程序容器与声明的每个调用方程序之间的绑定关系;分别为每个调用方程序显式地设置其所需调用的第二业务模块的模块标识及被调用方程序的被调用方标识,第二业务模块为与第一业务模块之间存在相互调用关系的业务模块;将声明的第二程序容器写入第一业务模块对应的构建文件中。
对于应用程序包括的每个业务模块,都按照上述方式完成编译过程,从而可得到每个业务模块的构建文件。而且本申请实施例还在应用程序中设计了桥接组件,桥接组件中包括消息总线服务和注册表。其中,消息总线服务负责模块间相互调用过程中的消息转发、目标模块定位及被调用方确认等所有相关操作,注册表中用于存储应用程序中各个业务模块的第一程序容器。
通过编译过程得到每个业务模块的构建文件后,依据每个业务模块的构建文件启动该应用程序,在启动时,从每个业务模块对应的构建文件中分别获取每个业务模块的第一程序容器和第二程序容器;将每个业务模块的第二程序容器中每个调用方程序的程序地址均调整为指向桥接组件中的消息总线服务;将每个业务模块的第一程序容器均写入桥接组件包括的注册表中。
如图2所示,在启动时将每个业务模块的callout容器中的每个调用方程序的程序地址指向桥接组件中的消息总线服务。将每个业务模块的face容器均写入桥接组件包括的注册表中。
完成上述应用程序的编译及启动过程之后,如图3所示,通过以下步骤实现业务模块之间的相互调用:
步骤101:当执行第一业务模块的调用方程序时,调用桥接组件。
在应用程序运行的过程中,执行第一业务模块的主体逻辑,当主体逻辑调用第一业务模块的第二程序容器(即callout容器)中的调用方程序时,由于在上述应用程序启动过程中已经将第一业务模块的第二程序容器中的每个调用方程序的程序地址指向桥接组件中的消息总线服务。因此在第一业务模块的主体逻辑调用第二程序容器中的任意调用方程序时,均会转而调用桥接组件,从而将第一业务模块的调用操作转化为桥接组件的调用操作。
步骤102:通过桥接组件判断该调用方程序所需调用的第二业务模块中的被调用方程序是否存在。
通过步骤101的操作调用桥接组件后,通过桥接组件包括的消息总线服务查找注册表中是否包含调用方程序所需调用的第二业务模块中的被调用方程序。首先通过消息总线服务获取调用方程序所需调用的第二业务模块的模块标识和被调用方标识。具体地,在第一业务模块的主体逻辑调用某个调用方程序时,解析出该调用方程序的程序指针指向桥接组件中的消息总线服务。因此跳转至执行消息总线服务,在此过程中会将第一业务模块中的该调用方程序的调用方标识传输给消息总线服务。消息总线服务根据该调用方标识,追加执行编译过程中声明的该调用方标识对应的程序主体,程序主体为该调用方程序的实现代码,该程序主体的实现代码中包括该调用方程序所需调用的第二业务模块的模块标识和被调用方标识。从该程序主体中获得该调用方程序所需调用的第二业务模块的模块标识和被调用方程序的被调用方标识。
然后根据上述获得的模块标识,查询桥接组件的注册表中是否包含该调用方程序所需调用的第二业务模块对应的第一程序容器;若注册表中包含第二业务模块对应的第一程序容器,则进一步判断第一程序容器中是否包括上述获得的被调用方标识对应的被调用方程序。若第一程序容器中包括该被调用方标识对应的被调用方程序,则表明该调用方程序所需调用的第二业务模块处于第一业务模块所在的工程项目中,且第二业务模块中包括了该调用方程序所需调用的被调用方程序,后续执行以下步骤103的操作来调用该被调用方程序。
若注册表中不包含第二业务模块对应的第一程序容器,则表明第二业务模块不在第一业务模块所在的工程项目中。或者,若注册表中虽然包含第二业务模块对应的第一程序容器,但第一程序容器中不包括上述被调用方标识对应的被调用方程序,则表明虽然第二业务模块在第一业务模块所在的工程项目中,但第二业务模块中并不包括该调用方程序所需调用的被调用方程序。在这两种情况下,无法实现该调用方程序对第二业务模块中的被调用方程序的调用,为避免这种调用失败的情况,本申请实施例在每个业务模块中为每个调用方程序设置了预设调用程序,在出现上述两种情况后,消息总线服务会将用于指示未查找到目标被调用方程序的指示参数返回给第一业务模块的该调用方程序,该调用方程序接收到该指示参数之后,会转而调用第一业务模块中该调用方程序对应的预设被调用程序。
执行上述预设被调用程序后,会将执行结果返回给该调用方程序。从而使该调用方程序获得一个默认的执行结果,并继续往下执行。避免了存在相互调用关系的第二业务模块不存在时导致第一业务模块执行出错的情况。
步骤103:若被调用方程序存在,则通过桥接组件调用第二业务模块中的该被调用方程序。
具体地,通过消息总线获取调用方程序对应的业务参数。例如,调用方程序需要调用第二业务模块的被调用方程序以获得某商品的详细信息,则该业务参数可以为该商品的标识。
通过消息总线服务将该业务参数传输给第二业务模块中的被调用方程序,以在第二业务模块中根据该业务参数执行被调用方程序;获取被调用方程序的执行结果,通过消息总线服务将执行结果传输给第一业务模块中的该调用方程序。
为了便于理解本申请实施例提供的调用方法,下面结合附图进行说明。如图4所示,在应用程序编译时,对每个业务模块中封装有被调用方程序的face容器和封装有调用方程序的callout容器进行注册,此处注册是指将face容器和callout容器进行了上文所述的一系列绑定操作,并将其写入业务模块对应的构建文件中。在应用程序启动时,将face容器整合至桥接组件的注册表中,即将face容器写入注册表中。以及,将callout容器整合至桥接组件中的消息总线服务,即将callout容器中的每个调用方程序的程序指针指向桥接组件中的消息总线服务。在应用程序运行时,业务模块的callout容器调出,即callout容器中的调用方程序通过桥接组件调用其他业务模块。而face容器中的被调用方程序通过桥接组件接收其他业务模块的调用。如图5所示,模块A为调用方,模块B为被调用方,当模块A的主体逻辑调用模块A中的callout容器时,通过桥接组件实现对模块B中的face容器的调用。
图6示出了本申请实施例的详细调用实现过程,S1:将业务模块包括的所有被调用方程序封装在第一程序容器中,将业务模块包括的所有调用方程序封装在第二程序容器中。S2:通过宏定义声明第一程序容器、业务模块包括的每个被调用方程序、第二程序容器及业务模块包括的每个调用方程序。S3:在编译时,将声明的第一程序容器、每个被调用方程序、第二程序容器及每个调用方程序收集在业务模块对应的构建文件中。S4:在启动时,从业务模块对应的构建文件中分别获取业务模块的第一程序容器和第二程序容器,将第二程序容器中每个调用方程序的程序地址指向桥接组件的消息总线服务,将第一程序容器写入桥接组件的注册表中。S5:在运行时,当执行第一业务模块的调用方程序时,调用桥接组件。S6:通过消息总线服务查找注册表中是否包含该调用方程序所需调用的第二业务模块中的被调用方程序,如果是,则执行步骤S7,如果否,则执行步骤S8。S7:通过消息总线服务调用第二业务模块中的被调用方程序。S8:调用第一业务模块中该调用方程序对应的预设被调用程序。
在本申请实施例中,将业务模块中的被调用方程序封装在第一程序容器中,将被调用方程序封装在第二程序容器中。并在编译时将第一程序容器和第二程序容器收集在业务模块的构建文件中。在应用程序中设置了桥接组件,在启动应用程序时将各业务模块的调用方程序的程序指针均指向桥接组件中的消息总线服务,将各业务模块的第一程序容器均写入桥接组件中的注册表中。任意具有相互调用关系的业务模块都可以通过该桥接组件实现模块间的程序调用。通过桥接组件使各业务模块之间的关联关系条理有序,使应用程序具有了跨模块通信的能力。各业务模块之间相互独立,将任意业务模块从应用程序的主工程中抽离,都不会影响其他业务模块的执行。实现多业务模块无依赖并行开发,研发人员无需把时间浪费在自己不关心的业务逻辑的构建上,且能实现对代码权限的分级管理。
本申请实施例还提供一种业务模块相互调用的实现装置,该装置用于执行上述任一实施例提供的业务模块相互调用的实现方法。参见图7,该装置包括:
桥接组件调用模块701,用于当执行第一业务模块的调用方程序时,调用桥接组件;
判断模块702,用于通过桥接组件判断调用方程序所需调用的第二业务模块中的被调用方程序是否存在;
调用模块703,用于若被调用方程序存在,则通过桥接组件调用第二业务模块中的被调用方程序。
在本申请实施例中,桥接组件中包括消息总线服务和注册表;
判断模块702,用于通过消息总线服务查找注册表中是否包含调用方程序所需调用的第二业务模块中的被调用方程序;
调用模块703,用于若判断模块702判断出注册表中包含被调用方程序,则通过消息总线服务调用第二业务模块中的被调用方程序。
查找模块702,具体用于通过消息总线服务获取调用方程序所需调用的第二业务模块的模块标识和被调用方标识;根据模块标识,查询注册表中是否包含调用方程序所需调用的第二业务模块对应的第一程序容器,第一程序容器中封装有第二业务模块包括的所有被调用方程序;若注册表中包含第二业务模块对应的第一程序容器,则判断第一程序容器中是否包括被调用方标识对应的被调用方程序;若第一程序容器中包括被调用方标识对应的被调用方程序,则执行调用模块703的操作。
调用模块703,还用于若查找模块702在注册表中未查找到第二业务模块对应的第一程序容器,或,在第一程序容器中未查找到被调用方标识对应的被调用方程序,则调用第一业务模块中调用方程序对应的预设被调用程序。
调用模块703,具体用于获取调用方程序对应的业务参数;通过消息总线服务将业务参数传输给第二业务模块中的被调用方程序,以在第二业务模块中根据业务参数执行被调用方程序;获取被调用方程序的执行结果,通过消息总线服务将执行结果传输给调用方程序。
该装置还包括:封装模块,用于将第一业务模块中包括的所有被调用方程序封装在第一程序容器中,第一业务模块为应用程序包括的任一业务模块;将第一业务模块中包括的所有调用方程序封装在第二程序容器中;
声明模块,用于通过宏定义声明第一程序容器及第一业务模块包括的每个被调用方程序;通过宏定义声明第二程序容器及第一业务模块包括的每个调用方程序。
该装置还包括:收集模块,用于在编译应用程序时,将声明的第一程序容器及每个被调用方程序收集在第一业务模块对应的构建文件中;将声明的第二程序容器及每个调用方程序收集在构建文件中。
收集模块,具体用于建立第一业务模块的模块标识与声明的第一程序容器之间的绑定关系;通过预设数据结构建立声明的第一程序容器与声明的每个被调用方程序之间的绑定关系;将建立绑定关系后的第一程序容器写入第一业务模块对应的构建文件中;以及,具体用于通过预设数据结构建立声明的第二程序容器与声明的每个调用方程序之间的绑定关系;分别为每个调用方程序设置其所需调用的第二业务模块的模块标识及被调用方程序的被调用方标识,第二业务模块为与第一业务模块之间存在相互调用关系的业务模块;将声明的第二程序容器写入第一业务模块对应的构建文件中。
该装置还包括:启动模块,用于在启动应用程序时,从每个业务模块对应的构建文件中分别获取每个业务模块的第一程序容器和第二程序容器;将每个业务模块的第二程序容器中每个调用方程序的程序地址均调整为指向桥接组件中的消息总线服务;将每个业务模块的第一程序容器均写入桥接组件包括的注册表中。
本申请的上述实施例提供的业务模块相互调用的实现装置与本申请实施例提供的业务模块相互调用的实现方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
本申请实施方式还提供一种电子设备,以执行上述业务模块相互调用的实现方法。请参考图8,其示出了本申请的一些实施方式所提供的一种电子设备的示意图。如图8所示,电子设备8包括:处理器800,存储器801,总线802和通信接口803,所述处理器800、通信接口803和存储器801通过总线802连接;所述存储器801中存储有可在所述处理器800上运行的计算机程序,所述处理器800运行所述计算机程序时执行本申请前述任一实施方式所提供的业务模块相互调用的实现方法。
其中,存储器801可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口803(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
总线802可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器801用于存储程序,所述处理器800在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的所述业务模块相互调用的实现方法可以应用于处理器800中,或者由处理器800实现。
处理器800可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器800中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器800可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器801,处理器800读取存储器801中的信息,结合其硬件完成上述方法的步骤。
本申请实施例提供的电子设备与本申请实施例提供的业务模块相互调用的实现方法出于相同的发明构思,具有与其采用、运行或实现的方法相同的有益效果。
本申请实施方式还提供一种与前述实施方式所提供的业务模块相互调用的实现方法对应的计算机可读存储介质,请参考图9,其示出的计算机可读存储介质为光盘30,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的业务模块相互调用的实现方法。
需要说明的是,所述计算机可读存储介质的例子还可以包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。
本申请的上述实施例提供的计算机可读存储介质与本申请实施例提供的业务模块相互调用的实现方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
需要说明的是:
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本申请并帮助理解各个发明方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下示意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种业务模块相互调用的实现方法,其特征在于,所述业务模块包括第一程序容器、第二程序容器和主体逻辑,所述主体逻辑为所述业务模块的程序代码,所述方法包括:
将第一业务模块中包括的所有被调用方程序封装在所述第一程序容器中,所述第一业务模块为应用程序包括的任一业务模块;将所述第一业务模块中包括的所有调用方程序封装在所述第二程序容器中;
当执行所述第一业务模块的调用方程序时,调用桥接组件;
通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在;
若所述被调用方程序存在,则通过所述桥接组件调用所述第二业务模块中的所述被调用方程序;
所述通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在,包括:
若所述第一程序容器中包括被调用方标识对应的被调用方程序,则执行通过消息总线服务调用所述被调用方程序的操作;
所述方法还包括:在启动所述应用程序时,从每个业务模块对应的构建文件中分别获取每个业务模块的第一程序容器和第二程序容器,将每个业务模块的第二程序容器中的每个调用方程序的程序地址指向所述桥接组件中的消息总线服务;将每个业务模块的第一程序容器写入所述桥接组件包括的注册表中。
2.根据权利要求1所述的方法,其特征在于,所述桥接组件中包括消息总线服务和注册表;所述通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在;若所述被调用方程序存在,则通过所述桥接组件调用所述第二业务模块中的所述被调用方程序,包括:
通过所述消息总线服务查找所述注册表中是否包含所述调用方程序所需调用的第二业务模块中的被调用方程序;
若所述注册表中包含所述被调用方程序,则通过所述消息总线服务调用所述第二业务模块中的所述被调用方程序。
3.根据权利要求2所述的方法,其特征在于,所述通过所述消息总线服务查找所述注册表中是否包含所述调用方程序所需调用的第二业务模块中的被调用方程序,包括:
通过所述消息总线服务获取所述调用方程序所需调用的第二业务模块的模块标识和被调用方标识;
根据所述模块标识,查询所述注册表中是否包含所述调用方程序所需调用的第二业务模块对应的第一程序容器,所述第一程序容器中封装有所述第二业务模块包括的所有被调用方程序;
若所述注册表中包含所述第二业务模块对应的第一程序容器,则判断所述第一程序容器中是否包括所述被调用方标识对应的被调用方程序。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若所述注册表中不包含所述第二业务模块对应的第一程序容器,或,所述第一程序容器中不包括所述被调用方标识对应的被调用方程序,则调用所述第一业务模块中所述调用方程序对应的预设被调用程序。
5.根据权利要求2所述的方法,其特征在于,所述通过所述消息总线服务调用所述第二业务模块中的所述被调用方程序,包括:
获取所述调用方程序对应的业务参数;
通过所述消息总线服务将所述业务参数传输给所述第二业务模块中的所述被调用方程序,以在所述第二业务模块中根据所述业务参数执行所述被调用方程序;
获取所述被调用方程序的执行结果,通过所述消息总线服务将所述执行结果传输给所述调用方程序。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述执行第一业务模块的调用方程序之前,还包括:
通过宏定义声明所述第一程序容器及所述第一业务模块包括的每个被调用方程序;
通过宏定义声明所述第二程序容器及所述第一业务模块包括的每个调用方程序。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在编译所述应用程序时,将声明的所述第一程序容器及所述每个被调用方程序收集在所述第一业务模块对应的构建文件中;
将声明的所述第二程序容器及所述每个调用方程序收集在所述构建文件中。
8.根据权利要求7所述的方法,其特征在于,所述将声明的所述第一程序容器及所述每个被调用方程序收集在所述第一业务模块对应的构建文件中,包括:
建立所述第一业务模块的模块标识与声明的所述第一程序容器之间的绑定关系;
通过预设数据结构建立声明的所述第一程序容器与声明的每个被调用方程序之间的绑定关系;
将建立绑定关系后的所述第一程序容器写入所述第一业务模块对应的构建文件中。
9.根据权利要求7所述的方法,其特征在于,所述将声明的所述第二程序容器及所述每个调用方程序收集在所述构建文件中,包括:
通过预设数据结构建立声明的所述第二程序容器与声明的每个调用方程序之间的绑定关系;
分别为所述每个调用方程序设置其所需调用的第二业务模块的模块标识及被调用方程序的被调用方标识,所述第二业务模块为与所述第一业务模块之间存在相互调用关系的业务模块;
将声明的所述第二程序容器写入所述第一业务模块对应的构建文件中。
10.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在启动所述应用程序时,从每个业务模块对应的构建文件中分别获取每个业务模块的第一程序容器和第二程序容器;
将每个业务模块的第二程序容器中每个调用方程序的程序地址均调整为指向所述桥接组件中的消息总线服务;
将每个业务模块的第一程序容器均写入所述桥接组件包括的注册表中。
11.一种业务模块相互调用的实现装置,其特征在于,所述业务模块包括第一程序容器、第二程序容器和主体逻辑,所述主体逻辑为所述业务模块的程序代码,所述装置包括:
封装模块,用于将第一业务模块中包括的所有被调用方程序封装在第一程序容器中,所述第一业务模块为应用程序包括的任一业务模块;将所述第一业务模块中包括的所有调用方程序封装在所述第二程序容器中;
桥接组件调用模块,用于当执行所述第一业务模块的调用方程序时,调用桥接组件;
判断模块,用于通过所述桥接组件判断所述调用方程序所需调用的第二业务模块中的被调用方程序是否存在;
调用模块,用于若所述被调用方程序存在,则通过所述桥接组件调用所述第二业务模块中的所述被调用方程序;
所述装置进一步被配置成:若所述第一程序容器中包括被调用方标识对应的被调用方程序,则执行通过消息总线服务调用所述被调用方程序的操作;
所述装置还被配置成:在启动所述应用程序时,从每个业务模块对应的构建文件中分别获取每个业务模块的第一程序容器和第二程序容器,将每个业务模块的第二程序容器中的每个调用方程序的程序地址指向所述桥接组件中的消息总线服务;将每个业务模块的第一程序容器写入所述桥接组件包括的注册表中。
12.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序以实现如权利要求1-10任一项所述的方法。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行实现如权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011552268.8A CN113448698B (zh) | 2020-12-24 | 2020-12-24 | 业务模块相互调用的实现方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011552268.8A CN113448698B (zh) | 2020-12-24 | 2020-12-24 | 业务模块相互调用的实现方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113448698A CN113448698A (zh) | 2021-09-28 |
CN113448698B true CN113448698B (zh) | 2024-04-02 |
Family
ID=77808668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011552268.8A Active CN113448698B (zh) | 2020-12-24 | 2020-12-24 | 业务模块相互调用的实现方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113448698B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894044A (zh) * | 2003-02-18 | 2010-11-24 | 微软公司 | 用于调度协处理器的处理的方法和系统 |
CN106411919A (zh) * | 2016-10-31 | 2017-02-15 | 用友网络科技股份有限公司 | 一种基于事件总线的web推送方法 |
CN108491283A (zh) * | 2018-03-30 | 2018-09-04 | 武汉斗鱼网络科技有限公司 | 一种数据传输方法、装置、计算机及存储介质 |
CN109343974A (zh) * | 2018-09-14 | 2019-02-15 | 珠海国芯云科技有限公司 | 基于容器的虚拟桌面的进程间通信方法及装置 |
CN110825448A (zh) * | 2019-09-18 | 2020-02-21 | 五八有限公司 | 实现多业务模块相互调用的方法、装置、电子设备和存储介质 |
CN111736922A (zh) * | 2020-07-23 | 2020-10-02 | 平安国际智慧城市科技股份有限公司 | 插件调用方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150261709A1 (en) * | 2014-03-14 | 2015-09-17 | Emilio Billi | Peripheral component interconnect express (pcie) distributed non- transparent bridging designed for scalability,networking and io sharing enabling the creation of complex architectures. |
-
2020
- 2020-12-24 CN CN202011552268.8A patent/CN113448698B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894044A (zh) * | 2003-02-18 | 2010-11-24 | 微软公司 | 用于调度协处理器的处理的方法和系统 |
CN106411919A (zh) * | 2016-10-31 | 2017-02-15 | 用友网络科技股份有限公司 | 一种基于事件总线的web推送方法 |
CN108491283A (zh) * | 2018-03-30 | 2018-09-04 | 武汉斗鱼网络科技有限公司 | 一种数据传输方法、装置、计算机及存储介质 |
CN109343974A (zh) * | 2018-09-14 | 2019-02-15 | 珠海国芯云科技有限公司 | 基于容器的虚拟桌面的进程间通信方法及装置 |
CN110825448A (zh) * | 2019-09-18 | 2020-02-21 | 五八有限公司 | 实现多业务模块相互调用的方法、装置、电子设备和存储介质 |
CN111736922A (zh) * | 2020-07-23 | 2020-10-02 | 平安国际智慧城市科技股份有限公司 | 插件调用方法、装置、电子设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
"Evaluating Performance of Containerized IoT Services for Clustered Devices at the Network Edge";Roberto Morabito;《IEEE Internet of Things Journal》;20170831;第4卷(第4期);第1019-1030页 * |
"基于PCIE总线图像采集系统的应用研究与实现";白少飞;《中国优秀硕士学位论文全文数据库 信息科技辑》;20141115(2014年第11期);第I140-167页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113448698A (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109002362B (zh) | 一种服务方法、装置、系统以及电子设备 | |
RU2473111C1 (ru) | Способ динамической компоновки программы на встроенной платформе и встроенная платформа | |
CN109710340B (zh) | 软件工具调用方法及装置、软件工具封装方法及装置 | |
CN111461887B (zh) | 一种区块链的共识处理方法、装置和电子设备 | |
CN110377438A (zh) | 跨进程通信接口的路由方法、装置和系统 | |
CN108595246B (zh) | 一种运行应用的方法、装置及设备 | |
US20220326981A1 (en) | Systemic extensible blockchain object model comprising a first-class object model and a distributed ledger technology | |
CN115827100A (zh) | 一种工业软件微服务合并的方法及系统 | |
CN113448698B (zh) | 业务模块相互调用的实现方法、装置、设备及存储介质 | |
CN114546639A (zh) | 服务调用处理方法及装置 | |
CN112181378B (zh) | 业务流程的实现方法及装置 | |
CN111443944B (zh) | 一种程序构建方法、装置及设备 | |
CN112764836A (zh) | 运行快应用的方法、装置及电子设备 | |
CN112256249A (zh) | 扩展Android系统功能的方法、设备及计算机存储介质 | |
CN111488144A (zh) | 一种数据处理方法以及设备 | |
CN113254163B (zh) | 区块链数据的处理方法及装置 | |
CN110941443A (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN112416612B (zh) | 服务调用方法、装置、计算机设备和可读存储介质 | |
CN115442372A (zh) | 一种接口调用方法及应用其的微服务应用系统 | |
CN111651469B (zh) | 一种管理区块链系统合约的方法和装置 | |
CN111045746A (zh) | 代码扩展方法和框架 | |
US7010454B1 (en) | Test services provider | |
CN114358936A (zh) | 一种基于微服务区块链的智能合约运行方法 | |
CN114860204A (zh) | 程序处理、运行方法、装置、终端、智能卡及存储介质 | |
CN112925527B (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 | ||
GR01 | Patent grant |