代码处理方法和装置与流程

文档序号:12664261阅读:234来源:国知局
代码处理方法和装置与流程

本申请涉及软件开发领域,特别涉及一种代码处理方法和装置。



背景技术:

在软件开发的过程中,通过将既有的用以实现某个功能的多个源代码模块进行合并来获得与某个业务相关的源代码文件,已成为目前比较常见的手段。

现有技术中,在实现多个源代码模块合并的过程中,为解决各个源代码模块的依赖问题,通常可以引入代码依赖框架,从而使得最终合并得到的源代码文件中的各模块通过上述代码依赖框架来解决模块依赖的问题。

现有技术中,由于引入的代码依赖框架会增加合并得到的源代码文件的长度,致使最终得到的源代码文件不够精简。



技术实现要素:

本申请实施例的目的是提供一种代码处理的方法及装置,用以解决现有技术中由于引入的代码依赖框架会增加合并得到的源代码文件的长度,致使最终得到的源代码文件不够精简的问题。

为解决上述技术问题,本申请实施例提供的代码处理的方法和装置是这样实现的:

一种代码处理的方法,包括:

获取与当前业务包含的模块对应的模块代码;

提取所述模块代码中包含的依赖信息;

根据所述依赖信息确定当前业务中的各模块的次序,并依据所述模块的次序合并所述模块代码,得到与所述当前业务对应的代码文件。

一种代码处理的装置,包括:

获取单元,用于获取与当前业务包含的模块对应的模块代码;

提取单元,用于提取所述模块代码中包含的依赖信息;

确定单元,用于根据所述依赖信息确定当前业务中的各模块的次序,并依据所述模块的次序合并所述模块代码,得到与所述当前业务对应的代码文件。

由以上本申请实施例提供的技术方案可见,本申请实施例提供的代码处理的方法及装置,通过在获取到与当前业务包含的模块对应的模块代码之后,提取所述模块代码中包含的依赖信息,并根据所述依赖信息确定当前业务中的各模块的次序,最终依据所述次序将所述模块代码进行合并,得到与所述当前业务对应的代码文件。以上过程中,避免通过引入特定的代码依赖框架来解决各模块的依赖问题,从而使得最终合并得到的代码文件更为精简。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一实施例中提供的代码处理方法的流程图;

图2为本申请一实施例中的根据依赖信息确定各模块的次序的方法流程图;

图3为本申请一实施例中的根据依赖信息确定各模块的次序的方法流程图;

图4为本申请一实施例中提供的代码处理装置的模块示意图。

具体实施方式

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

图1为本申请一实施例中的代码处理方法的流程图。本实施例中,所述代码处理方法包括如下步骤:

S110:获取与当前业务包含的模块对应的模块代码。

当前业务是软件开发人员当前所需实现的业务,该当前业务可以包含多个预先规划的模块,并且各个模块之间可以存在依赖关系。其中,在需要实现某个业务之前,可以由软件开发人员指定当前业务所包含的模块。举例而言,对于当前业务X,其包含的模块可以是{a、b、c、d、e},随后可根据这些模块分别获取到与之对应的模块代码。

本申请实施例中,获取与当前业务包含的模块对应的模块代码之前,所述方法还包括:

根据模块之间的依赖关系,在各模块的模块代码中添加与依赖关系对应的依赖信息;将各模块的模块代码与该模块的模块标识进行映射并存储。

如前所述,各个模块之间可以存在依赖关系,这些依赖关系可以通过在各模块的模块代码中添加相应的依赖信息来实现。如:

/*global extend*/

//依赖extend

function ajax(settings){

}

在上述示例性的模块代码中,则可以通过依赖信息“/*global extend*/”来实现该模块“ajax”依赖于模块“extend”。

按照上述方法分别在存在依赖关系的模块的模块代码中添加相应的依赖信息,并赋予所述划分的各模块以不同的模块标识ID(例如上述“ajax”、“extend”),则每个模块的模块代码与该模块的模块标识一一对应。最终将这些添加依赖信息后的模块代码分别与各个模块的模块标识ID进行映射,并存 储到源代码数据库中。

如上所述,本实施例中,该步骤S110具体包括:

接收用户输入的与当前业务包含的模块对应的模块标识。

根据所述模块标识查询到与当前业务包含的模块对应的模块代码。

所述用户可以是软件开发人员,系统接收软件开发人员根据当前业务的需求输入的与当前业务包含的各模块对应的模块标识。随后,系统根据接收到的各个模块标识查询上述源代码数据库,得到预先存储的与各个模块对应的模块代码。如:输入的模块标识包括:“ajax”、“extend”,则系统查询与模块标识“ajax”、“extend”相映射的模块代码。

S120:提取所述模块代码中包含的依赖信息。

具体地,本申请实施例可以通过编辑相应的提取依赖信息的正则表达式(Regular Expression,RE)来扫描模块代码以获取所述依赖信息。

举例而言,若当前业务X包含的模块是{a、b、c、d、e},通过扫描上述模块对应的模块代码,可以得到模块a的模块代码中包含的依赖信息是:“/*global a*/”,模块b的模块代码中包含的依赖信息是:“/*global c*/”,模块d的模块代码中包含的依赖信息是:“/*global b*/”,模块e的模块代码中包含的依赖信息是:“/*global c*/”;则,上述依赖信息对应的依赖关系如下:

a依赖于b,b依赖于c,d依赖于b,e依赖于c。

S130:根据所述依赖信息列表确定当前业务中的各模块的次序,并依据所述次序将所述模块代码进行合并,得到与所述当前业务对应的代码文件。

本申请一实施例中,在上述步骤S120之后和该步骤S130之前,所述方法还包括:

S140:根据提取的依赖信息确定与当前业务对应的依赖信息列表。其中,所述依赖信息列表是按照提取得到的依赖关系,将当前业务的各模块按照一定顺序进行排序。

继续沿用上述例子,若当前业务X包含的模块是{a、b、c、d、e},并通 过提取各模块代码中的依赖信息可以得到下述依赖关系:a依赖于b,b依赖于c,d依赖于b,e依赖于c。则,可以得到依赖信息列表中的模块顺序是:[a,b,c]、[d,b]、[e,c],随后,通过将上述模块顺序进行合并,得到依赖信息列表中的模块顺序是:[a,b,c,d,b,e,c]。

图2为本申请一实施例中的根据所述依赖信息确定当前业务中的各模块的次序的步骤的方法的流程图。基于上述步骤,该步骤S130具体包括:

S1301:判断所述依赖信息列表中是否存在多余的模块标识。

沿用上述例子,得到的依赖信息列表中的模块顺序是:[a,b,c,d,b,e,c],可见,该依赖信息列表中存在多余的模块标识:b、c,也就是说,一个模块标识在依赖信息列表中只能出现一次。

S1302:若是,将所述多余的模块标识进行删除。

在上述例子中,将多余的模块标识:b、c作删除处理,得到删除后的依赖信息列表中的模块顺序是:[a,d,b,e,c]。

S1303:将删除所述多余的模块标识的所述依赖信息列表中的模块标识的顺序进行倒序排列,将倒序排列后的模块标识的顺序确定为当前业务中的各模块的次序。

在上述例子中,由于最终合并生成的代码文件中,被依赖的模块代码需要置于代码文件中靠前的位置,故,本实施例可以对上述删除后的依赖信息列表中的模块顺序:[a,d,b,e,c]作倒序排列,并将倒序排列后的模块标识的顺序:[c,e,b,d,a]确定为当前业务中的各模块的次序。

最终可以根据上述当前业务中的各模块的次序对查询得到的模块代码进行合并,得到与当前业务对应的代码文件。

举例而言,若模块a的模块代码是:

/*global b*/

//依赖b

function a(settings){

}

若模块b的模块代码是:

/*global c*/

//依赖c

function b(settings){

}

若模块c的模块代码是:

function c(settings){

}

若模块d的模块代码是:

/*global b*/

//依赖b

function d(settings){

}

若模块e的模块代码是:

/*global c*/

//依赖c

function e(settings){

}

则按照上述确定为当前业务中的各模块的次序,将上述各模块代码进行合并后,得到最终的代码文件是:

function c(settings){

}

/*global c*/

//依赖c

function e(settings){

}

/*global c*/

//依赖c

function b(settings){

}

/*global b*/

//依赖b

function d(settings){

}

/*global b*/

//依赖b

function a(settings){

}

值得述及的是,上述当前业务中的各模块的次序并不是唯一的,部分不存在相互依赖关系的模块之间的次序可以颠倒,如:在[c,e,b,d,a]中,a和e的次序可以相互对调。此外,在实际应用中,可能存在某个模块与其他模块并不存在任何依赖关系(该模块的模块代码中也不包含依赖信息),则在最终合并代码文件的过程中,可以将该没有依赖关系的模块代码插置于最终合并得到的代码文件中的任意位置。

本申请另一实施例中,在没有上述步骤S140的前提下,上述步骤S130中的根据所述依赖信息确定当前业务中的各模块的次序的步骤,如图3所示,具 体包括:

S1304:根据所述依赖信息,确定被依赖模块的第一模块标识和依赖模块的第二模块标识。

继续沿用上述例子,若当前业务X包含的模块是{a、b、c、d、e},并通过提取各模块代码中的依赖信息可以得到下述依赖关系:a依赖于b,b依赖于c,d依赖于b,e依赖于c。其中,被依赖模块包括:b、c,依赖模块包括:a、b、d、e。

S1305:判断预设的次序表中是否存在所述第一模块标识或所述第二模块标识。

本实施例中,系统预先设置一个次序表,以依次将确定的存在依赖关系的模块标识插入到该次序表中。

S1306:若存在所述第一模块标识而不存在所述第二模块标识,则将所述第二模块标识置于所述第一模块标识之后。

S1307:若存在所述第二模块标识而不存在所述第一模块标识,则将所述第一模块标识置于所述第二模块标识之前。

通过上述步骤S1306和步骤S1307,上述次序表中的模块标识的插入顺序如下:

起初,次序表为空,“a依赖于b”中的被依赖模块是b,依赖模块是a,则按照被依赖模块在前、依赖模块在后的次序插入到次序表中,得到次序表:

[b、a];

随后,对于“b依赖于c”,被依赖模块是c,依赖模块是b,通过判断,可以发现上述次序表中已经存在b(符合步骤S1307的情况),则将模块c插置于模块b之前,得到次序表:

[c、b、a];

对于“d依赖于b”,被依赖模块是b,依赖模块是d,通过判断,可以发现上述次序表中已经存在b(符合步骤S1306的情况),则将模块d插置于模块 b之后,得到次序表:

[c、b、d、a];

对于“e依赖于c”,被依赖模块是c,依赖模块是e,通过判断,可以发现上述次序表中已经存在c(符合步骤S1306的情况),则将模块e插置于模块c之后,得到次序表:

[c、e、b、d、a]。

至此,按照上述过程可以确定最终的次序表中的模块标识的顺序为当前业务对应的各模块的次序。则,依据所述次序表中包含的模块标识的次序合并所述模块代码,得到与所述当前业务对应的代码文件。

本申请实施例中,为了使得最终合并得到的代码文件更为精简,还包括:

确定合并后的所述模块代码中包含的注释信息并删除。所述注释信息包括但不限于:用于描述依赖关系的注释等,例如:“//依赖extend”。

与上述方法流程对应的,本申请的实施例还提供了一种代码处理的装置。该装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过服务器的中央处理器(Central Process Unit,CPU)将对应的计算机程序指令读取到内存中运行形成的。

图4为本申请一实施例提供的代码处理的装置的模块示意图。其中,该装置中各单元的功能与上述方法中各步骤的功能类似,故该装置可以参照上述方法实施例的具体内容。该装置包括:

获取单元401,用于获取与当前业务包含的模块对应的模块代码;

提取单元402,用于提取所述模块代码中包含的依赖信息;

确定单元403,用于根据所述依赖信息确定当前业务中的各模块的次序,并依据所述模块的次序合并所述模块代码,得到与所述当前业务对应的代码文件。

如图4的所示的装置,本申请实施例中,该装置还包括:

存储单元,用于根据模块之间的依赖关系,在各模块的模块代码中添加与 依赖关系对应的依赖信息;将各模块的模块代码与该模块的模块标识进行映射并存储;

则,所述获取单元401具体用于:

接收用户输入的与当前业务包含的模块对应的模块标识;

根据所述模块标识查询到与当前业务包含的模块对应的模块代码。

如图4的所示的装置,本申请实施例中,该装置还包括:

列表生成单元,用于根据提取的依赖信息确定与当前业务对应的依赖信息列表;

则,所述确定单元403具体包括:

第一判断单元,用于判断所述依赖信息列表中是否存在多余的模块标识;

删除单元,若所述依赖信息列表中存在多余的模块标识时,将所述多余的模块标识进行删除;

次序确定单元,用于将删除所述多余的模块标识的所述依赖信息列表中的模块标识的顺序进行倒序排列,将倒序排列后的模块标识的顺序确定为当前业务中的各模块的次序。

如图4的所示的装置,本申请实施例中,所述确定单元403具体包括:

依赖确定单元,用于根据所述依赖信息,确定被依赖模块的第一模块标识和依赖模块的第二模块标识;

第二判断单元,用于判断预设的次序表中是否存在所述第一模块标识或所述第二模块标识;

排序单元,用于在次序表中存在所述第一模块标识而不存在所述第二模块标识时,将所述第二模块标识置于所述第一模块标识之后;在次序表中存在所述第二模块标识而不存在所述第一模块标识时,将所述第一模块标识置于所述第二模块标识之前;依据所述次序表中包含的模块标识的次序合并所述模块代码,得到与所述当前业务对应的代码文件。

如图4的所示的装置,本申请实施例中,该装置还包括:

注释删除单元,用于确定合并后的所述模块代码中包含的注释信息并删除。

由以上本申请实施例提供的技术方案可见,本申请实施例通过在获取到与当前业务包含的模块对应的模块代码之后,提取所述模块代码中包含的依赖信息,并根据所述依赖信息确定当前业务中的各模块的次序,最终依据所述次序将所述模块代码进行合并,得到与所述当前业务对应的代码文件。以上过程中,避免通过引入特定的代码依赖框架来解决各模块的依赖问题,从而使得最终合并得到的代码文件更为精简。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中 的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设 备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1