首页> 中国专利> 组件引用数据的处理方法及装置、存储介质及电子装置

组件引用数据的处理方法及装置、存储介质及电子装置

摘要

本发明公开了一种组件引用数据的处理方法及装置、存储介质及电子装置,其中,上述方法包括:在检测到代码提交行为后,获取变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系;将变更的代码所在的组件包以及引用关系上传到服务端,其中,服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端;接收检测结果并判断全库组件之间是否存在循环引用关系;在存在的情况下,按照预设规则发出提醒。采用上述技术方案,解决了组件间的循环引用关系检测需要在系统开发以后进行,并且检测复杂度较高等问题。

著录项

  • 公开/公告号CN113064814A

    专利类型发明专利

  • 公开/公告日2021-07-02

    原文格式PDF

  • 申请/专利号CN202110255363.X

  • 发明设计人 李阅苗;

    申请日2021-03-09

  • 分类号G06F11/36(20060101);G06F9/445(20180101);

  • 代理机构11240 北京康信知识产权代理有限责任公司;

  • 代理人谭惠月

  • 地址 266101 山东省青岛市崂山区海尔路1号海尔工业园

  • 入库时间 2023-06-19 11:42:32

说明书

技术领域

本发明涉及通信领域,具体而言,涉及一种组件引用数据的处理方法及装置、存储介质及电子装置。

背景技术

随着社会的发展,应用软件和应用系统成了我们生活不可或缺的一部分,现代应用软件和应用系统的开发方式都是采用搭积木式的组件式开发,所以不同组件和组件之间必然会存在依赖关系。

但由于应用软件和应用系统的由于体量比较大,所以在开发的时候,往往不是一个人进行开发,而是由一个团队进行协同开发,有时候为了图方便,就会使得多个组件之间存在循环引用的关系。但传统检测方法需要在系统开发以后进行,不能在编写代码的时候实时检测,并且检测的过程比较复杂。

针对相关技术,组件间的循环引用关系检测需要在系统开发以后进行,并且检测复杂度较高等问题,目前尚未提出有效的解决方案。

发明内容

本发明实施例提供了一种组件引用数据的处理方法及装置、存储介质及电子装置,以至少解决相关技术中,组件间的循环引用关系检测需要在系统开发以后进行,并且检测复杂度较高等问题。

根据本发明实施例的一个方面,提供一种组件引用数据的处理方法,应用于客户端,包括:在检测到代码提交行为后,获取变更的代码所在的组件包以及所述变更的代码中记录的组件对其他组件的引用关系;将变更的代码所在的组件包以及所述引用关系上传到服务端,其中,所述服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将所述检测结果发送到所述客户端;接收所述检测结果并判断全库组件之间是否存在循环引用关系;在存在的情况下,按照预设规则发出提醒。

进一步地,接收所述检测结果并判断全库组件之间是否存在循环引用关系之后,还包括:在根据所述检测结果判断出全库组件之间存在循环引用关系的情况下,生成组件依赖关系图,拒绝将所述变更的代码保存在所述全库代码中,在根据所述检测结果判断出全库组件之间不存在循环引用关系的情况下,将所述变更的代码保存在所述全库代码中。

进一步地,检测到代码提交行为,包括:实时扫描本地代码;在所述本地代码有变更的情况下,确定出现所述代码提交行为。

根据本发明实施例的另一个方面,还提供了一种组件引用数据的处理方法,应用于服务端,包括:接收客户端发送的变更的代码所在的组件包以及所述变更的代码中记录的组件对其他组件的引用关系;根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果;将所述检测结果发送到所述客户端。

进一步地,根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,包括:从所述全库组件中确定一个目标组件;对所述全库组件进行遍历,以确定所述一个目标组件对所述全库组件中其余组件的引用关系;从所述全库组件中确定下一个目标组件,对所述全库组件进行遍历,以确定所述下一个目标组件对所述全库组件中其余组件的引用关系,直至所述全库组件中的每个组件对其余组件的引用关系都确定完毕;根据每个目标组件对其余组件的引用关系,得到检测结果。

进一步地,根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果之后,还包括:生成全库组件引用关系报告;通过即时通信方式将所述引用关系报告发送给预设对象。

根据本发明实施例的另一个方面,还提供了一种组件引用数据的处理装置,应用于客户端,包括:获取模块,用于在检测到代码提交行为后,获取变更的代码所在的组件包以及所述变更的代码中记录的组件对其他组件的引用关系;第一发送模块,将变更的代码所在的组件包以及所述引用关系上传到服务端,其中,所述服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将所述检测结果发送到所述客户端;第一接收模块,用于接收所述检测结果并判断全库组件之间是否存在循环引用关系;提醒模块,用于在存在的情况下,按照预设规则发出提醒。

根据本发明实施例的另一个方面,还提供了一种组件引用数据的处理装置,应用于服务端,包括:第二接收模块,用于接收客户端发送的变更的代码所在的组件包以及所述变更的代码中记录的组件对其他组件的引用关系;检测模块,用于根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果;第二发送模块,用于将所述检测结果发送到所述客户端。

根据本发明实施例的另一个方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述组件引用数据的处理方法。

根据本发明实施例的另一个方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述组件引用数据的处理方法。

通过本发明,引入一种组件引用数据的处理方法,在客户端检测到代码提交行为后,获取到变更的代码所在的组件包以及所述变更的代码中记录的组件对其他组件的引用关系,随后将客户端将变更的代码所在的组件包以及所述引用关系上传到服务端,服务端会根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端,客户端接收检测结果并判断全库组件之间是否存在循环引用关系,并在存在的情况下,按照预设规则发出提醒。采用上述技术方案,解决了组件间的循环引用关系检测需要在系统开发以后进行,并且检测复杂度较高等问题,进而在开发的过程中,只要客户端检测到变更代码,就将变更代码所在的包和对其他包的引用关系上传给服务器,让服务器进行检测,实时的将检测结果返回给客户端,提高了检测效率,帮助开发人员避免产生循环依赖的设计缺陷,提升代码质量。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示例性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种组件引用数据的处理方法的计算机终端的硬件结构框图;

图2是根据本发明实施例的组件引用数据的处理方法的流程图;

图3是根据本发明实施例的组件引用数据的处理方法的组件依赖关系图;

图4是根据本发明实施例的组件引用数据的处理方法的又一流程图;

图5是根据本发明实施例的组件引用数据的处理方法的客户端和服务端交互图;

图6是根据本发明实施例的组件引用数据的处理方法的组件依赖检测和生成依赖关系图的流程图;

图7是根据本发明实施例的组件引用数据的处理方法一种组件代码结构图;

图8是根据本发明实施例的组件引用数据的处理方法一种循环依赖检测结果图;

图9是根据本发明实施例的组件引用数据的处理方法另一种循环依赖检测结果图;

图10是根据本发明实施例的一种组件引用数据的处理装置的结构框图;

图11是根据本发明实施例的一种组件引用数据的又一处理装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请实施例中所提供的方法实施例可以在计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种组件引用数据的处理方法的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,在一个示例性实施例中,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示等同功能或比图1所示功能更多的不同的配置。

存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的组件引用数据的处理方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

在开发系统的过程中,这种组件之间的依赖关系是系统设计上首要杜绝的问题,因为循环依赖会导致代码无法独立开发,无法独立发布,系统扩展性差等严重问题。并且当多团队协同开发时,各团队开发的组件是否存在循环依赖关系,只有到最终代码合并入库,搭建系统的环节才有可能检测出来,或者根本就无法检测。这给代码质量带来了很大的风险。

为了解决上述问题,在本实施例中提供了一种组件引用数据的处理方法,应用于客户端,图2是根据本发明实施例的组件引用数据的处理方法的流程图,该流程包括如下步骤:

步骤S202,在检测到代码提交行为后,获取变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系;

步骤S204,将变更的代码所在的组件包以及引用关系上传到服务端,其中,服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端;

步骤S206,接收检测结果并判断全库组件之间是否存在循环引用关系;

步骤S208,在存在的情况下,按照预设规则发出提醒。

通过上述步骤,在客户端检测到代码提交行为后,获取到变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系,随后将客户端将变更的代码所在的组件包以及引用关系上传到服务端,服务端会根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端,客户端接收检测结果并判断全库组件之间是否存在循环引用关系,并在存在的情况下,按照预设规则发出提醒。采用上述技术方案,解决组件间的循环引用关系检测需要在系统开发以后进行,并且检测复杂度较高等问题。进而在开发的过程中,只要客户端检测到变更代码,就将变更代码所在的包和对其他包的引用关系上传给服务器,让服务器进行检测,实时的将检测结果返回给客户端,提高了检测效率,帮助开发人员避免产生循环依赖的设计缺陷,提升代码质量。

为了更好的理解,上述步骤S202在检测是否有代码提交行动的过程中,在一个可选的实施例中,可以通过以下技术方案来实现,实时扫描本地代码;在本地代码有变更的情况下,确定出现代码提交行为。

在本实施例中,客户端会部署在开发工具上面,开发人员在开发工具上进行代码的编写,客户端会对本地代码实时扫描,检测开发人员有没有对代码进行修改,若当开发人员在开发工具上进行编写代码,并且将编写的代码保存在本地的时候,客户端监测到此时有代码变更,进行判断出有开发人员提交代码的行为。

客户端将变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系上传给服务端后,服务端根据全库代码对全库组件之间的循环引用关系进行检测,将检测结果下发给客户端,在一个可选的实施例中,接收检测结果并判断全库组件之间是否存在循环引用关系之后,还包括:在根据检测结果判断出全库组件之间存在循环引用关系的情况下,生成组件依赖关系图,拒绝将变更代码保存在全库代码中,在根据检测结果判断出全库组件之间不存在循环引用关系的情况下,将变更的代码保存在全库代码中。

在本实施例中,在服务端进行检测完以后,客户端会收到服务端的检测结果,若根据检测结果判断出全库组件之间存在循环引用关系,将组件间全库组件之间的循环引用关系生成组件依赖关系图,并且客户端会拒绝将变更代码保存在全库代码中,若根据检测结果判断出全库组件之间不存在循环引用关系,则客户端会将变更的代码保存在全库代码中。

需要说明的是,服务端检测分析以后,客户端会接收从服务器发送过来的关于全库组件之间的引用关系表,如下面表一所示:

表一

进而根据组件间的引用关系表来判断是否存在循环引用关系,以表一为例,组件A引用了组件B,而组件B又引用了组件A,则确定组件A和组件B存在循环引用关系,同理,组件B和组件D也存在循环引用关系组件,A引用了组件C,组件C引用组件B,组件B又引用了组件A,进而组件C引用了组件A,则确定组件A和组件C存在循环引用关系,同理组件C和组件B存在循环引用关系,故可以判断出变更的代码所在组件包存在循环引用关系,进而根据组件间的引用关系表来生成组件依赖关系图,具体方法如下,图3是根据本发明实施例的组件引用数据的处理方法的组件依赖关系图,如图3所示,先将组件A、B、C、D间的引用关系形成一张加权有向图,随后从图中的一个节点(相当于组件)开始遍历,判断是否存在一个节点可以通过边自己形成一个回路,若可以,则这个节点与另一个节点存在循环引用关系,将这两个节点用双箭头连接其他,最后形成的组件依赖关系图。

上述说明基于客户端描述,为了更好的理解本发明,在本实施例中提供了一种组件引用数据的处理方法,应用于服务端,图4是根据本发明实施例的组件引用数据的处理方法的又一流程图,该流程包括如下步骤:

步骤S402:接收客户端发送的变更的代码所在的组件包以及变更代码中记录的组件对其他组件的引用关系;

步骤S404:根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果;

步骤S406:将检测结果发送到客户端。

通过上述步骤,服务端可以接收客户端发送的变更的代码所在的组件包以及变更代码中记录的组件对其他组件的引用关系,并根据全库代码对全库组件之间的循环引用关系进行检测,将检测结果发送到客户端。

为了更好的理解上述步骤,上述步骤S404在执行的过程中,在一个可选的实施例中,根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,包括:从全库组件中确定一个目标组件;对全库组件进行遍历,以确定一个目标组件对全库组件中其余组件的引用关系;从全库组件中确定下一个目标组件,对全库组件进行遍历,以确定下一个目标组件对全库组件中其余组件的引用关系,直至全库组件中的每个组件对其余组件的引用关系都确定完毕;根据每个目标组件对其余组件的引用关系,得到检测结果。

在本实施例中,从全库组件中随机选取一个组件作为目标组件,并根据这各目标组件中的代码的内来判断对其他组件的引用关系,以JAVA为例,若组件A的代码中有“import com.my.B”,则认为组件A引用了组件B,通过这种方法来确定目标组件对全库组件中其他组件的一个引用关系,全库组件中确定下一个目标组件,对全库组件进行遍历,根据目标组件的方法同样的确定下一个目标组件对全库组件中其余组件的引用关系,直至全库组件中的每个组件对其余组件的引用关系都确定完毕,随后根据每个目标组件对其余组件的引用关系,得到检测结果,最后可以得到如表一所示的引用关系表。

在一个可选的实施例中,上述步骤S404在根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果之后,还包括:生成全库组件引用关系报告;通过即时通信方式将引用关系报告发送给预设对象。

在本实施例中,服务端定期检查全库的循环依赖关系,避免开发者绕过客户端提交代码到代码仓产生循环依赖关系,将检测生成全库组件引用关系报告通过即时通信方式将引用关系报告发送给预设对象,其中即时通信方式可以是邮件,预设对象可以的系统的开发人员,因为可以是系统的管理人员。

显然,上述所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。为了更好的理解上述组件引用数据的处理方法,以下结合实施例对上述过程进行说明,但不用于限定本发明实施例的技术方案,具体地:

在一个可选的实施例中,系统分为客户端和服务端两部分,客户端作为开发插件安装到开发者开发工具中,接管代码的提交操作,服务端负责收集客户端提交信息并进行循环依赖检测。图5是根据本发明实施例的组件引用数据的处理方法的客户端和服务端交互图,具体步骤如下:

步骤1:开发者提交代码到本地代码;

步骤2:客户端实时从本地代码中扫描变更代码,检测提交代码行为;

步骤3:将变更的代码所在的包,以及包对其他包的引用关系上传给服务端;

步骤4:服务端接收各客户端上传的变更代码所在的包,以及包对其他包的引用关系;

步骤5:通过全库代码结构和包间的引用关系和对变更代码所在的包进行循环依赖检测分析;

步骤6:将变更代码所在的包里面的代码与全库的代码结构进行合并;

步骤7:将生成的循环依赖关系检测结果下发到客户端代理;

步骤8:客户端接收从服务端发送过来的循环依赖关系检测结果;

步骤9:判断是否存在循环依赖关系,在存在的情况下,执行步骤10,在不存在的情况下,执行步骤11;

步骤10:将组件包之间的循环依赖关系生成依赖关系图,客户端拒绝将变更代码提交到代码仓;

步骤11:客户端将变更代码提交到代码仓;

步骤12:服务端对定时对全库的包进行依赖检测分析;

步骤13:服务端将循环依赖关系报告通过邮件公示给开发人员或者管理人员。

为了更好的理解服务端进行循环依赖检测和客户端如何绘制依赖关系图,在一个可选的实施例中,图6是根据本发明实施例的组件引用数据的处理方法的组件依赖检测和生成依赖关系图的流程图,具体步骤如下:

步骤S602:登记待分析组件及包名;

此步骤首先要登记各组件在代码中的包名,因为在代码中引用其他的组件都是用包名来引用的,而不是用组件名,具体登记的结果如下面表二:

表二

步骤S604:遍历每个组件包下的每一个代码文件;

需要说明的是,一个组件包里有多个文件或文件夹。图7是根据本发明实施例的组件引用数据的处理方法一种组件代码结构图,如图7,首先遍历当前文件夹下的文件,然后在递归遍历子文件夹下的所有文件,遍历完当前文件夹,在遍历相邻文件夹下的所有文件。

步骤S606:标记当前正在分析的组件节点,如第一次进入组件目录时候,记录当前组件名到A列;

步骤S608:标记当前组件对其他组件的引用边;

需要说明的是,进入组件后,从第一个文件开始分析,在java中引用其他文件或组件的关键字是“import”,在C中使用“includ”,有些语言用“use”,此处以java语言为例,假设组件A中的某个java文件中,import关键自后引用的包名包含“com.my.B”,在步骤S602生成的包名清单中,则表示A引用了组件B,记引用次数+1,如果组件A中的其他文件同样有对组件B的引用,则引用次数进行累加,最后可以得到如表一所示的结果。

步骤S610:形成一张加权有向图;

需要说明的是,通过对所有组件目录的分析,最终记录下来表格的数据,形成了一张加权有向图。其中节点为组件,有向边是组件-组件形成的一条记录,权重等于引用次数。

步骤S612:去除所有单向引用边;

需要说明的是,在有向图上,从任意一条边e:[n1-n2]开始,如果在图上找不到一条边e:[n2-n1],则认为这个引用是单向的,从该列表中删除。重复以上动作,直到所有边都遍历完成。最终形成一个只剩双向有引用的边的图,将表一合并之后权重相加,如表三所示:

表三

步骤S614:绘制组件及依赖关系图,最后将以上表格绘制成带有双向有权图,在实际的操作过程中,由于一般大型系统的组件比较多,有十几个甚至几十上百个,最终形成的关系比较复杂,则需要在展示结构上,按照引用关系数量,从中心向周围进行排列。图8是根据本发明实施例的组件引用数据的处理方法一种循环依赖检测结果图,具体如图8,图8将组件之间的引用关系从中心向周围进行排列,为了更好了理解服务端是如何将全库组件的循环依赖关系形成依赖关系图。图9是根据本发明实施例的组件引用数据的处理方法另一种循环依赖检测结果图,根据系统的结构,形成一个全库组件,进而通过循环检测分析,生成依赖关系图。

此外,本发明实施例的上述技术方案,本发明可以帮助开发人员避免产生循环依赖的设计缺陷,提升代码质量,帮助审核人员方便审查代码的循环依赖,能运用在代码整体搭建环节,提前检测代码的依赖性,帮助设计人员优化系统结构,在开发过程中实时检测多团队开发代码之间的循环依赖。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。

在本实施例中还提供了一种组件引用数据的处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的设备较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图10是根据本发明实施例的一种组件引用数据的处理装置的结构框图,应用于客户端,该装置包括:

获取模块100,用于在检测到代码提交行为后,获取变更的代码所在的组件包以及变更代码中记录的组件对其他组件的引用关系;

第一发送模块102,将变更的代码所在的组件包以及引用关系上传到服务端,其中,服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端;

第一接收模块104,用于接收检测结果并判断全库组件之间是否存在循环引用关系;

提醒模块108,用于在存在的情况下,按照预设规则发出提醒。

通过本发明,在客户端检测到代码提交行为后,获取到变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系,随后将客户端将变更的代码所在的组件包以及引用关系上传到服务端,服务端会根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端,客户端接收检测结果并判断全库组件之间是否存在循环引用关系,并在存在的情况下,按照预设规则发出提醒。采用上述技术方案,解决组件间的循环引用关系检测需要在系统开发以后进行,并且检测复杂度较高等问题。进而在开发的过程中,只要客户端检测到变更代码,就将变更代码所在的包和对其他包的引用关系上传给服务器,让服务器进行检测,实时的将检测结果返回给客户端,提高了检测效率,帮助开发人员避免产生循环依赖的设计缺陷,提升代码质量。

在一个可选的实施例中,获取模块102还用于实时扫描本地代码;在本地代码有变更的情况下,确定出现代码提交行为。

在本实施例中,客户端会部署在开发工具上面,开发人员在开发工具上进行代码的编写,客户端会对本地代码实时扫描,检测开发人员有没有对代码进行修改,若当开发人员在开发工具上进行编写代码,并且将编写的代码保存在本地的时候,客户端就会认为此时有代码变更,进行判断出有开发人员提交代码的行为。

在一个可选的实施例中,接收模块104还用于在根据检测结果判断出全库组件之间存在循环引用关系的情况下,生成组件依赖关系图,拒绝将变更代码保存在全库代码中,在根据检测结果判断出全库组件之间不存在循环引用关系的情况下,将变更的代码保存在全库代码中。

在本实施例中,在服务端进行检测完以后,客户端会收到服务端的检测结果,若根据检测结果判断出全库组件之间存在循环引用关系,将组件间全库组件之间的循环引用关系生成组件依赖关系图,并且客户端会拒绝将变更代码保存在全库代码中,若根据检测结果判断出全库组件之间不存在循环引用关系,则客户端会将变更的代码保存在全库代码中。

需要说明的是,服务端检测分析以后,客户端会接收从服务器发送过来的关于全库组件之间的引用关系表,如表一所示:

进而根据组件间的引用关系表来判断是否存在循环引用关系,以表一为例,组件A引用了组件B,而组件B又引用了组件A,则确定组件A和组件B存在循环引用关系,同理,组件B和组件D也存在循环引用关系组件,A引用了组件C,组件C引用组件B,组件B又引用了组件A,进而组件C引用了组件A,则确定组件A和组件C存在循环引用关系,同理组件C和组件B存在循环引用关系。故可以判断出变更的代码所在组件包存在循环引用关系,进而根据组件间的引用关系表来生成组件依赖关系图,具体方法如下,先将组件A、B、C、D间的引用关系形成一张加权有向图,随后从图中的一个节点(相当于组件)开始遍历,判断是否存在一个节点可以通过边自己形成一个回路,若可以,则这个节点与另一个节点存在循环引用关系,将这两个节点用双箭头连接其他,最后形成的组件依赖关系图如图3所示,组件A,组件B和组件C之间两两相互依赖,组件B和组件D相互依赖。为了更好的理解本发明,在本实施例中提供了一种组件引用数据的处理装置,应用于服务端,图11是根据本发明实施例的一种组件引用数据的又一处理装置的结构框图,应用于服务端,该装置包括:

第二接收模块112,用于接收客户端发送的变更的代码所在的组件包以及变更代码中记录的组件对其他组件的引用关系;

检测模块114,用于根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果;

第二发送模块116,用于将检测结果发送到客户端。

在一个可选的实施例中,检测模块114还用于从全库组件中确定一个目标组件;对全库组件进行遍历,以确定一个目标组件对全库组件中其余组件的引用关系;从全库组件中确定下一个目标组件,对全库组件进行遍历,以确定下一个目标组件对全库组件中其余组件的引用关系,直至全库组件中的每个组件对其余组件的引用关系都确定完毕;根据每个目标组件对其余组件的引用关系,得到检测结果。

在本实施例中,从全库组件中随机选取一个组件作为目标组件,并根据这各目标组件中的代码的内来判断对其他组件的引用关系,以JAVA为例,若组件A的代码中有“import com.my.B”,则认为组件A引用了组件B,通过这种方法来确定目标组件对全库组件中其他组件的一个引用关系,全库组件中确定下一个目标组件,对全库组件进行遍历,根据目标组件的方法同样的确定下一个目标组件对全库组件中其余组件的引用关系,直至全库组件中的每个组件对其余组件的引用关系都确定完毕,随后根据每个目标组件对其余组件的引用关系,得到检测结果,最后可以得到如表一所示的引用关系表。

在一个可选的实施例中,检测模块114还用于生成全库组件引用关系报告;通过即时通信方式将引用关系报告发送给预设对象。

在本实施例中,服务端会定期检查全库的循环依赖关系,避免开发者绕过客户端提交代码到代码仓产生循环依赖关系,将检测生成全库组件引用关系报告通过即时通信方式将引用关系报告发送给预设对象,其中即时通信方式可以是邮件,预设对象可以的系统的开发人员,因为可以是系统的管理人员。

本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

S1,在检测到代码提交行为后,获取变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系;

S2,将变更的代码所在的组件包以及引用关系上传到服务端,其中,服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端;

S3,接收检测结果并判断全库组件之间是否存在循环引用关系;

S4,在存在的情况下,按照预设规则发出提醒。

在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:

S1,在检测到代码提交行为后,获取变更的代码所在的组件包以及变更的代码中记录的组件对其他组件的引用关系;

S2,将变更的代码所在的组件包以及引用关系上传到服务端,其中,服务端根据全库代码对全库组件之间的循环引用关系进行检测,得到检测结果,将检测结果发送到客户端;

S3,接收检测结果并判断全库组件之间是否存在循环引用关系;

S4,在存在的情况下,按照预设规则发出提醒。

在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号