发明内容
本发明实施例提供了一种管理软件功能模块生命周期的方法和装置,以实现对多个功能模块的有序析构,降低软件维护成本。
第一方面,提供了一种管理软件功能模块生命周期的方法,所述方法包括:
在软件启动时,生成所述软件内各个功能模块之间的依赖关系图谱;
根据所述依赖关系图谱,确定所述各个功能模块的析构顺序;
在所述软件准备退出时,按照确定的所述析构顺序,对所述各个功能模块进行有序析构。
可选地,所述生成软件内各个功能模块之间的依赖关系图包括:
读取配置文件,所述配置文件中描述了各个功能模块之间的依赖关系;
根据所述配置文件,生成所述各个功能模块之间的依赖关系图谱。
其中,所述配置文件可以作为所述软件的一部分来存储,各个模块之间的依赖关系可以利用JSON、XML或INI格式来描述。
可选地,在一个实施例中,所述方法还包括:
在所述软件需要更新时,通过更新所述配置文件来实现对功能模块析构顺序的调整。
可选地,所述依赖关系图谱为有向无环图DAG,所述根据所述依赖关系图谱,确定所述各个功能模块的析构顺序包括:
利用所述依赖关系图谱按照如下方式进行拓扑排序:
i)、选择一个入度为0的顶点并输出;
ii)、从所述依赖关系图谱中删除所述顶点以及所有出边;
iii)、循环执行以上步骤i)和ii)。
第二方面,提供了一种管理软件功能模块生命周期的装置,所述装置包括:
生成单元,用于在软件启动时,生成所述软件内各个功能模块之间的依赖关系图谱;
确定单元,用于根据所述生成单元生成的所述依赖关系图谱,确定所述各个功能模块的析构顺序;
处理单元,用于在所述软件准备退出时,按照所述确定单元确定的所述析构顺序,对所述各个功能模块进行有序析构。
可选地,所述生成单元具体用于:
读取配置文件,所述配置文件中描述了各个功能模块之间的依赖关系;
根据所述配置文件,生成所述各个功能模块之间的依赖关系图谱。
可选地,所述装置还包括存储单元,
所述存储单元,用于将所述配置文件作为所述软件的一部分来存储,其中,所述配置文件中各个模块之间的依赖关系是利用JSON、XML或INI格式来描述。
可选地,在本发明的一个实施例中,所述装置还包括:
更新单元,用于在所述软件需要更新时,对所述配置文件进行更新;
所述生成单元,还用于根据更新后的配置文件,生成更新后的依赖关系图谱;
所述确定单元,还用于根据所述更新后的依赖关系图谱,确定更新后的各个功能模块的析构顺序;
所述处理单元,还用于根据所述更新后的功能模块析构顺序,对所述各个功能模块进行有序析构。
可选地,所述依赖关系图谱为有向无环图DAG,所述确定单元具体用于:
利用所述依赖关系图谱按照如下方式进行拓扑排序:
i)、选择一个入度为0的顶点并输出;
ii)、从所述依赖关系图谱中删除所述顶点以及所有出边;
iii)、循环执行以上步骤i)和ii)。
本发明实施例提供的管理软件功能模块生命周期的方法和装置,利用各个功能模块之间的依赖关系图谱来确定所述各个功能模块的析构顺序,并按照确定的所述析构顺序,对所述各个功能模块进行有序析构。由于依赖关系图谱可以清晰地反映出各个功能模块之间的依赖关系,因而据此便能够确定各个功能模块之间适当的析构顺序,从而实现对多个功能模块的有序析构,降低软件维护成本。
具体实施方式
为了本领域技术人员更好地理解本申请的技术方案,下面先对本文中的一些术语进行解释。
有向无环图(Directory Acyclic Graph,DAG)是由集合的顶点和有向边构成,每条边连接一个顶点到另一个,以此,从某一顶点p开始,沿着有序的边,最终循环再次回到p是不可能的。
功能模块是指数据说明、可执行语句等程序元素的集合。功能模块完成了软件程序的一个子功能。
本发明实施例利用依赖关系图谱确定功能模块间的析构顺序,可以保证多个功能模块间的有序析构,降低软件维护成本。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种管理软件功能模块生命周期的方法的流程图。参照图1,本发明实施例提供的管理软件功能模块生命周期的方法可包括:
11、在软件启动时,生成所述软件内各个功能模块之间的依赖关系图谱;
12、根据所述依赖关系图谱,确定所述各个功能模块的析构顺序;
13、在所述软件准备退出时,按照确定的所述析构顺序,对所述各个功能模块进行有序析构。
在本发明实施例中,所述依赖关系图谱能够反映各个功能模块之间的依赖关系。
在本发明实施例中,可选地,所述依赖关系图谱可以是有向无环图或是能够反映各个功能模块之间的依赖关系的其他图谱。
需要说明的是,在软件工程对象模型中,依赖关系描述两个模型元素(类、用例等)之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。在本发明实施例中,依赖关系中的模型元素特指的是软件中的功能模块。
若模块A依赖于模块B时,即模块A的功能实现需要依赖于模块B的功能实现,则基于模块A和模块B之间的依赖关系,便能确定模块A和模块B间的析构顺序,从而达到管理模块生命周期的目的。
当模块A依赖于模块B时,不仅体现出了功能性上的依赖,也体现出了生命周期上的依赖,即模块A的生命周期依赖于模块B的生命周期,从而确立了模块A、B之间的析构顺序:A析构之后,B再析构。
本发明实施例提供的管理软件功能模块生命周期的方法,利用各个功能模块之间的依赖关系图谱来确定所述各个功能模块的析构顺序,并按照确定的所述析构顺序,对所述各个功能模块进行有序析构。由于依赖关系图谱可以清晰地反映出各个功能模块之间的依赖关系,因而据此便能够确定各个功能模块之间适当的析构顺序,从而实现对多个功能模块的有序析构,降低软件维护成本。
可选地,步骤11中所述生成软件内各个功能模块之间的依赖关系图可包括:
读取配置文件,所述配置文件中描述了各个功能模块之间的依赖关系;
根据所述配置文件,生成所述各个功能模块之间的依赖关系图谱。
其中,可选地,所述配置文件中各个功能模块之间的依赖关系可以利用JSON、XML或INI格式来描述。这样一来,便能够动态生成其功能模块间的依赖关系图谱。
以JSON格式描述各个功能模块之间的依赖关系为例,本发明实施例中采用了JSON这一数据格式对模块间的依赖关系进行描述的大致描述格式如下:
按以上格式描述,表达的是“Depender depends on Dependee”,即“Depender依赖于Dependee”。
软件程序根据该配置文件的描述便能正确地生成软件中功能模块间的依赖关系图谱。
此外,在本发明实施例中,所述配置文件可作为所述软件的一部分来存储,即,所述配置文件以程序资源的形式链接进程序中。如此一来,可以保证所述配置文件的安全性,防止配置文件被恶意修改或损坏。当然,在安全性要求不高的情况下,也可以采用将所述配置文件不作为所述软件的一部分来存储。
当软件需要更新时,如在需要增加、减少功能模块的情况下,需要调整功能模块间的依赖关系进而重新调整析构顺序,此时,只需要更新该配置文件即可,这样,可以实现简单高效地更新软件。在本发明的一个实施例中,除了包括上面提到的步骤11~13之外,本发明实施例提供的管理软件功能模块生命周期的方法还可包括:在所述软件需要更新时,通过更新所述配置文件来实现对功能模块析构顺序的调整。
在本发明实施例中,在所述依赖关系图谱为有向无环图DAG时,步骤13中所述根据所述依赖关系图谱,确定所述各个功能模块的析构顺序可包括:
利用所述依赖关系图谱按照如下方式进行拓扑排序:
i)、选择一个入度为0的顶点并输出;
ii)、从所述依赖关系图谱中删除所述顶点以及所有出边;
iii)、循环执行以上步骤i)和ii)。
本文中的拓扑排序是指,对一个DAG图G进行拓扑排序,是将图G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
拓扑排序常用来确定一个依赖关系集中事件发生的顺序。本发明中为了获得各功能模块间的析构顺序,利用已经确立的各模块间的依赖关系DAG图谱进行拓扑排序。
图2是一种DAG图的示例。图2所示的DAG图在利用本文中的方法进行拓扑排序后的结果是:2->8->0->3->7->1->5->6->9->4->11->10->12。可见,在本发明实施例中,利用DAG图可以明确确定出各个功能模块间的析构顺序,实现有序地析构各个功能模块,节约维护和开发成本。
图3是本发明实施例提供的另一种管理软件功能模块生命周期的方法的流程图。参照图3,本发明实施例提供的管理软件功能模块生命周期的方法可包括:
31、在软件启动时,读取配置文件,生成依赖关系图谱,其中,所述配置文件中描述了各个功能模块之间的依赖关系。
其中,所述依赖关系图谱可以为DAG图。所述配置文件中各个功能模块之间的依赖关系可利用JSON、XML或INI格式来描述。
32、在程序运行时,相应创建各个功能模块。
33、在所述软件准备退出时,根据所述依赖关系图谱,确定所述各个功能模块的析构顺序。
其中,利用所述依赖关系图谱按照如下方式进行拓扑排序:
i)、选择一个入度为0的顶点并输出;
ii)、从所述依赖关系图谱中删除所述顶点以及所有出边;
iii)、循环执行以上步骤i)和ii)。
34、按照确定的所述析构顺序,对所述各个功能模块进行有序析构。
在所述软件需要更新时,通过更新所述配置文件来实现对功能模块析构顺序的调整。
本发明实施例提供的管理软件功能模块生命周期的方法,利用各个功能模块之间的依赖关系图谱来确定所述各个功能模块的析构顺序,并按照确定的所述析构顺序,对所述各个功能模块进行有序析构。由于依赖关系图谱可以清晰地反映出各个功能模块之间的依赖关系,因而据此便能够确定各个功能模块之间适当的析构顺序,从而实现对多个功能模块的有序析构,降低软件维护成本。
图4A是本发明实施例提供的一种管理软件功能模块生命周期的装置的结构框图。参照图4,本发明实施例提供的管理软件功能模块生命周期的装置40可包括生成单元41、确定单元42以及处理单元43。其中:
生成单元41,用于在软件启动时,生成所述软件内各个功能模块之间的依赖关系图谱;
确定单元42,用于根据所述生成单元41生成的所述依赖关系图谱,确定所述各个功能模块的析构顺序;
处理单元43,用于在所述软件准备退出时,按照所述确定单元42确定的所述析构顺序,对所述各个功能模块进行有序析构。
本发明实施例提供的管理软件功能模块生命周期的装置,利用各个功能模块之间的依赖关系图谱来确定所述各个功能模块的析构顺序,并按照确定的所述析构顺序,对所述各个功能模块进行有序析构。由于依赖关系图谱可以清晰地反映出各个功能模块之间的依赖关系,因而据此便能够确定各个功能模块之间适当的析构顺序,从而实现对多个功能模块的有序析构,降低软件维护成本。
可选地,所述生成单元41可具体用于:
读取配置文件,所述配置文件中描述了各个功能模块之间的依赖关系;
根据所述配置文件,生成所述各个功能模块之间的依赖关系图谱。
可选地,在本发明的一个实施例中,参照图4B,所述装置40还包括存储单元44,
所述存储单元44,用于将所述配置文件作为所述软件的一部分来存储,其中,所述配置文件中各个模块之间的依赖关系是利用JSON、XML或INI格式来描述。
可选地,在本发明的一个实施例中,参照图4C,所述装置40还可包括:
更新单元45,用于在所述软件需要更新时,对所述配置文件进行更新;
所述生成单元41,还用于根据更新后的配置文件,生成更新后的依赖关系图谱;
所述确定单元42,还用于根据所述更新后的依赖关系图谱,确定更新后的各个功能模块的析构顺序;
所述处理单元43,还用于根据所述更新后的功能模块析构顺序,对所述各个功能模块进行有序析构。
可选地,在本发明的另一个实施例中,所述依赖关系图谱为有向无环图DAG,所述确定单元42可具体用于:
利用所述依赖关系图谱按照如下方式进行拓扑排序:
i)、选择一个入度为0的顶点并输出;
ii)、从所述依赖关系图谱中删除所述顶点以及所有出边;
iii)、循环执行以上步骤i)和ii)。
需要说明的是:上述实施例提供的管理软件功能模块生命周期的装置在描述时仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的单元或功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的管理软件功能模块生命周期的装置与管理软件功能模块生命周期的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。