CN117971207A - 一种多模板导出的实现方法和装置 - Google Patents
一种多模板导出的实现方法和装置 Download PDFInfo
- Publication number
- CN117971207A CN117971207A CN202410156397.7A CN202410156397A CN117971207A CN 117971207 A CN117971207 A CN 117971207A CN 202410156397 A CN202410156397 A CN 202410156397A CN 117971207 A CN117971207 A CN 117971207A
- Authority
- CN
- China
- Prior art keywords
- export
- data
- template
- factory
- specific
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 112
- 230000006870 function Effects 0.000 claims description 72
- 230000008676 import Effects 0.000 claims description 9
- 238000010276 construction Methods 0.000 claims description 5
- 238000004458 analytical method Methods 0.000 claims description 3
- 230000008859 change Effects 0.000 abstract description 4
- 238000012986 modification Methods 0.000 description 9
- 230000004048 modification Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 238000007792 addition Methods 0.000 description 6
- 238000012423 maintenance Methods 0.000 description 6
- 238000009795 derivation Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及软件开发技术领域,提供了一种多模板导出的实现方法和装置。本发明通过抽象导出模块获取待导出数据的导出条目ID,将所述导出条目ID传入至抽象工厂;再通过抽象工厂的管理功能类,根据所述导出条目ID获取需求模板,将所述导出条目ID传入至所述需求模板所对应的具体工厂,通过抽象工厂实现了代码的集中管理,使导出功能相关代码的结构便于改动、增加和维护;最后通过具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件,将所述导出文件返回至所述抽象导出模块,以通过抽象导出模块实现导出;解决了由于相似冗余代码过多导致的导出功能的错误率较高,可维护性与可拓展性较差的问题。
Description
技术领域
本发明涉及软件开发技术领域,特别是涉及一种多模板导出的实现方法和装置。
背景技术
文件导出是各行各业不可或缺的需求,目前几乎所有软件系统中均包含文件导出功能。根据导出文件的用途不同,所需文件的数据结构也不同,所以有多种文件导出的需求模板。在这个前提下,存在根据文件中的数据导出基于不同需求模板的文件的需求,且对于不同需求模板还可能存在导出不同数据格式的特定导出需求。
现有技术中,由于需求模板不同和特定导出需求存在不同,用于实现导出的导出方法(即相关代码的结构)也不尽相同。一个导出方法往往只能所对应一种需求模板,此时如果需求模板较多,那么总导出功能类中会存在大量基于不同需求模板的相似冗余代码;根据不同需求模板的不同特定导出需求,具体的导出方法或导出功能类中会进一步存在大量基于不同数据格式的相似冗余代码。且数据导入功能和导出功能分离在不同的代码结构中,每次进行导入和导出时,还需要额外查询所需导出的导出条目ID,进一步增加了相似冗余代码。具有导出功能的软件系统存在大量相似冗余代码时,在处理请求或事务时,错误率较高,即软件系统的稳定性和可靠性较低;且不利于后续对导出功能相关代码的改动、增加和维护,例如新增需求模板,使得导出功能的可维护性与可拓展性较差。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
发明内容
本发明要解决的技术问题是提供一种多模板导出的实现方法和装置,其目的在于使导出功能相关代码的结构便于改动、增加和维护,减少相似冗余代码,解决现有技术在需求模板较多的情况下,因为一个导出方法对应一种需求模板,使得导出功能的错误率较高,可维护性与可拓展性较差的问题。
本发明采用如下技术方案:
第一方面,本发明提供了一种多模板导出的实现方法,抽象出导出功能,并定义抽象工厂,包括:
抽象导出模块获取待导出数据的导出条目ID,将所述导出条目ID传入至抽象工厂;
所述抽象工厂的管理功能类根据所述导出条目ID获取需求模板,将所述导出条目ID传入至所述需求模板所对应的具体工厂;
所述具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件,将所述导出文件返回至所述抽象导出模块,以通过抽象导出模块实现导出。
进一步地,所述抽象工厂为需求产品接口;所述具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件包括:
所述具体工厂的构造函数根据所述导出条目ID获取所述待导出数据的基础信息,根据所述基础信息,获取所述待导出数据;
确定所述待导出数据的至少一个导出数据格式;
所述构造函数根据所述导出数据格式,得到所述具体工厂的具体生产者;
所述具体生产者根据所述导出数据格式,将所述待导出数据导出,得到导出文件。
进一步地,所述构造函数根据所述导出数据格式,得到所述具体工厂的具体生产者包括:
在所述构造函数中,创建所述具体工厂的export方法;其中,所述具体工厂的export方法为所述具体工厂中的具体生产者;
在所述具体工厂的export方法中,添加根据导出数据格式将所述待导出数据导出的操作代码。
进一步地,所述具体生产者根据所述导出数据格式,将所述待导出数据导出,得到导出文件包括:
将所述待导出数据的导入数据格式与所述具体工厂的export方法中的导出数据格式进行匹配,确定所需的导出数据格式;
根据所述所需的导出数据格式所对应的操作代码,将所述待导出数据以所述所需的导出数据格式导出,得到导出文件。
进一步地,所述根据所述所需的导出数据格式所对应的操作代码,将所述待导出数据以所述所需的导出数据格式导出,得到导出文件包括:
获取预设格式的当前时间字段;根据所述当前时间字段,生成文件名;
根据所述文件名,生成所述待导出数据的导出URL;
根据所述导出URL,生成所需导出至的文件路径;
根据所述待导出数据得到所述导出文件,将所述导出文件导出至所述文件路径。
进一步地,一种需求模板对应一个具体工厂,所有具体工厂均由所述管理功能类统一管理。
进一步地,还包括:
当需要新增需求模板时,在所述管理功能类的getNetDocument方法中,添加第一操作代码,所述第一操作代码用于根据所述导出条目ID,从相应的具体工厂中得到新增的需求模板所对应的导出文件;
创建新增的需求模板的具体工厂;
在具体工厂中,添加第二操作代码,所述第二操作代码用于根据所述新增的需求模板将所述待导出数据导出。
进一步地,所述在具体工厂中,添加第二操作代码包括:
创建抽象工厂的新增类Template,作为所述新增的需求模板的具体工厂;
所述具体工厂中创建构造函数Template;在所述构造函数Template中添加获取待导出数据的基础信息的操作代码,以及添加根据基础信息获取待导出数据的操作代码;
确定所述新增的需求模板的至少一个新增数据格式;
在所述构造函数Template中创建所述新增类Template的export方法,添加根据所述新增数据格式将所述待导出数据导出的操作代码,以实现需求产品接口中的export方法。
第二方面,本发明提供了一种多模板导出的实现方法,从多套用于导出具体表格的原始导出代码集中,获取所需复用的原始导出代码集和所述原始导出代码集对应的具体表格;结合所述具体表格,对所述原始导出代码集进行智能分析,以根据所述原始导出代码集生成对应的通用导出模板;其中,所述原始导出代码集包括用于导出所述具体表格的全部程序指令集,以及所述全部程序指令集所涉及的调用库;所述多模板导出的实现方法还包括:
当指定用所述原始导出代码集生成通用导出模板时,对于原始导出代码集中的每一个数据对象,通过依次执行所述原始导出代码集中的每一行原始操作代码,确定所述数据对象与相应的原始操作代码对应的执行结果之间的关联关系;
根据所述关联关系,确定所述数据对象所代表的含义;根据所述含义与所述原始导出代码集,生成至少一套通用操作代码;所述通用操作代码用于替换对应的原始操作代码,将所述含义以变量参数、函数和程序指令的形式表达;
显示所述原始导出代码集,以复选框或注释的方式,在所述数据对象之后罗列出所生成的通用操作代码;使用选择的通用操作代码替换所述数据对象;
当所述原始导出代码集中的每一个数据对象均被替换为通用操作代码时,得到目标导出代码集,将所述目标导出代码集作为所述通用导出模板。
第三方面,本发明还提供了一种多模板导出的实现装置,用于实现第一方面所述的多模板导出的实现方法,所述多模板导出的实现装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的多模板导出的实现方法。
第四方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的多模板导出的实现方法。
区别于现有技术,本发明至少具有以下有益效果:
本发明通过抽象导出模块获取待导出数据的导出条目ID,将所述导出条目ID传入至抽象工厂;再通过抽象工厂的管理功能类,根据所述导出条目ID获取需求模板,将所述导出条目ID传入至所述需求模板所对应的具体工厂,通过抽象工厂实现了代码的集中管理,使导出功能相关代码的结构便于改动、增加和维护;最后通过具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件,将所述导出文件返回至所述抽象导出模块,以通过抽象导出模块实现导出;减少了同一个类或方法中的相似冗余代码,对开发人员屏蔽底层细节,使导出功能相关代码的结构便于改动、增加和维护,解决了由于相似冗余代码过多导致的导出功能的错误率较高,可维护性与可拓展性较差的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的一种代码结构的类图;
图2是本发明实施例提供的一种多模板导出的实现方法的整体流程示意图;
图3是本发明实施例步骤30的一种具体流程示意图;
图4是本发明实施例步骤304的具体流程示意图;
图5是本发明实施例提供的一种多模板导出的实现方法的代码结构的类图;
图6是本发明实施例提供的一种多模板导出的实现方法的流程示意图;
图7是本发明实施例步骤403的一种具体流程示意图;
图8是本发明实施例提供的另一种多模板导出的实现方法的流程示意图;
图9是本发明实施例提供的一种具体表格的格式的示意图;
图10是本发明实施例提供的一种在显示原始导出代码集的界面上通过复选框罗列通用操作代码的示意图;
图11是本发明实施例提供的一种多模板导出的实现装置的架构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
本发明中术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
在本发明中,除非另有明确的规定和限定,术语“连接”应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以通过中间媒介间接相连。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
现有技术中软件系统的导出功能多使用同一接口导出多种模板的导出文件,需要根据前端传入的数据来进行判断,选择需求模板进行导出。现有的判断方法大多数是在总导出功能类的代码中直接使用if-else,不仅不直观,也给新增需求模板或者修改需求模板带来了不便,每次均需要翻阅大量文件和代码并理解,才能编写新代码实现对需求模板的修改、新增和维护,代码可读性较低。
且实现总导出功能类的代码相对分散;例如,使用Spring框架进行开发,当需要为两个模板制定导出方法时,则需要将两个不同的导出方法放在所对应的总业务service(即,总导出功能类)文件下,使得总业务service既包含选择需求模板的判断,又包含导出方法,且需要修改总业务service中原有的代码;这种代码结构违反了软件的开闭原则,使得导出功能的可维护性与可拓展性较差。
例如,如图1所示,由于使用Spring框架的代码结构相对分散,在总业务service中使用getAppscene方法获取前端传入的数据(例如,所需导出的导出条目ID),根据前端传入的数据进行if-else判断,以选择需求模板;确定需求模板(例如,Access模板)后,调用对应的各个子模块(即,不同的需求模板的导出功能)的模板service(例如,Access模板service);模板service负责依据特定的业务逻辑具体实现导出;总业务service和所有用于导出的模板service形成一个完整的导出功能。
其中,getAppscene方法中存在用于确定不同的需求模板的if-else,在确定需求模板后的某个具体if或else中,需要调用对应的模板service,即指定了具体实现导出的类,所以在新增需求模板的导出方法时,需要将该导出方法的操作代码直接放在getAppscene方法中,且修改getAppscene方法原有的代码。
其中,每个模板service中还包括其他方法,比如增删改查;每个模板导出的数据格式不一定相同,所以使用getProductInfo方法获取前端传入的所需基础信息(例如,某表格中所需导出的属性列),并根据该基础信息拿到相应的待导出数据;如果这些待导出数据的数据格式不一样,则需要使用大量if-else以不同的数据格式对待导出数据进行导出,每一个if-else所对应一个以相应模板的不同数据格式的导出方法。在该情况下,总业务service与模板service中均存在大量冗余代码,不利于后续对导出功能相关代码的改动、增加和维护。
且待导出数据的导入操作和导出操作存在冗余操作,向getAppscene方法输入需要导出的导出条目ID,还需要额外使用getProductInfo方法查询待导出数据。
为了解决上述问题,如图2所示,本发明实施例提供了一种多模板导出的实现方法,包括:
步骤10:抽象导出模块获取待导出数据的导出条目ID,将所述导出条目ID传入至抽象工厂。
其中,导出条目ID为待导出数据的唯一索引,例如,文件名ID。
本发明实施例的抽象导出模块指总导出功能类,总导出功能类为导出功能的主体方法,通过该总导出功能类实现一个完整的导出功能。
在本实施例中,首先抽象出导出功能,并定义抽象工厂。抽象工厂指抽象工厂模式中的抽象工厂角色,具体可以为需求产品接口,任何在抽象模式中创建对象的具体工厂类必须实现该需求产品接口。在可选地实施例中,抽象工厂也可使用抽象工厂类实现。
本发明实施例提供了一个使用Spring框架实现定义需求产品接口(即,ProductSpe接口)实现抽象工厂的实例,具体如下:
public interface ProductSpe{
String export();//在需求产品接口中定义export方法,以便于具体工厂重写该export导出方法,实现导出;
}
步骤20:所述抽象工厂的管理功能类根据所述导出条目ID获取需求模板,将所述导出条目ID传入至所述需求模板所对应的具体工厂。
本发明实施例的具体工厂指抽象工厂模式中的具体工厂角色,具体为实现需求产品接口的类。具体工厂中包括具体进行导出的相关代码,具体工厂受到导出文件对象productSpe的调用,以生成导出文件。
步骤30:所述具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件,将所述导出文件返回至所述抽象导出模块,以通过抽象导出模块实现导出。
在可选的实施例中,所述导出文件可以为Excel格式、word格式或PDF格式。
本发明实施例提供了一个使用Spring框架实现抽象导出模块(即,exportByFactory类)的实例,具体如下:
public String exportByFactory(String codesk){
ProductSpe productSpe=NetDocumentExportFactory.getNetDocument(codesk);//定义抽象工厂的所需导出的导出文件对象productSpe;通过调用抽象工厂的管理功能类中的判断需求模板方法getNetDocument,向getNetDocument方法传入导出条目IDcodesk,以便于根据该导出条目ID获取需要导出的数据;
return productSpe.export()};//该导出文件对象productSpe,通过export方法得到返回值,该返回值即最终导出的文件。
本发明通过抽象导出模块获取待导出数据的导出条目ID,将所述导出条目ID传入至抽象工厂;再通过抽象工厂的管理功能类,根据所述导出条目ID获取需求模板,将所述导出条目ID传入至所述需求模板所对应的具体工厂,通过抽象工厂实现了代码的集中管理,使导出功能相关代码的结构便于改动、增加和维护;最后通过具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件,将所述导出文件返回至所述抽象导出模块,以通过抽象导出模块实现导出;减少了同一个类或方法中的相似冗余代码,对开发人员屏蔽底层细节,使导出功能相关代码的结构便于改动、增加和维护,解决了由于相似冗余代码过多导致的导出功能的错误率较高,可维护性与可拓展性较差的问题。
为了通过具体工厂生成导出文件,如图3所示,所述抽象工厂为需求产品接口;
在步骤30中,所述具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件包括:
步骤301:所述具体工厂的构造函数根据所述导出条目ID获取所述待导出数据的基础信息,根据所述基础信息,获取所述待导出数据。
其中,构造函数用于在创建对象时,初始化对象,即设置对象的属性并执行必要的操作;构造函数与类的名称相同,没有返回类型,并且它们不能被直接调用。
例如,在管理功能类中根据导出条目ID判断需求模板为Access,根据导出文件对象productSpe获取需求模板Access的对象ACCESS,构造函数Access实现需求产品接口中的export方法。
其中,根据导出条目ID确定待导出数据所处的位置,例如,某个Excel文件,还需要具体地确定在该位置中所需的基础信息,如Excel表格中存在几个sheet,才能根据sheet的编号获取该Excel文件中所有sheet的数据,即待导出数据。
步骤302:确定所述待导出数据的至少一个导出数据格式。
由于对于不同需求模板还可能存在导出不同数据格式的特定导出需求,即导出数据格式,所以需要根据导出数据格式构建不同的导出方法。
步骤303:所述构造函数根据所述导出数据格式,得到所述具体工厂的具体生产者。
在所述构造函数中,创建所述具体工厂的export方法;其中,所述具体工厂的export方法为所述具体工厂中的具体生产者,即抽象工厂模式中的具体导出角色。
在所述具体工厂的export方法中,添加根据导出数据格式将所述待导出数据导出的操作代码。由于本发明实施例的需求产品接口中仅有export方法,所以此处只用实现export方法。
步骤304:所述具体生产者根据所述导出数据格式,将所述待导出数据导出,得到导出文件。
本发明实施例通过具体实现类的实现具体工厂,获取待导出数据及根据相应的需求模板导出。在具体实现类中,通过实现需求产品接口中的export导出方法,得到在具体实现类的构造函数中export导出方法,以实现具体生产者。本发明实施例提供了一个需求模板为Access的具体工厂实例,具体如下:
由于需求模板还可能存在导出不同数据格式的特定导出需求,如图4所示,所述步骤304包括:
步骤3041:将所述待导出数据的导入数据格式与所述具体工厂的export方法中的导出数据格式进行匹配,确定所需的导出数据格式。
步骤3042:根据所述所需的导出数据格式所对应的操作代码,将所述待导出数据以所述所需的导出数据格式导出,得到导出文件。
本发明实施例将待导出数据的导入和导出均放在构造函数中,实现了导入和导出的一体化。具体而言,将导入功能(构造函数中导入待导出数据)和导出功能(构造函数中export方法)整合到了一起。在构造函数中,实现输入需要导出的导出条目ID,即可自动查询出需要的待导出数据,不需要额外查询,减少了相似冗余的代码。
本发明实施例提供了一种需求模板为Access的具体工厂中,可选的export方法,具体代码见上述Access的具体工厂实例,所述步骤3042包括:
获取预设格式的当前时间字段;根据所述当前时间字段,生成文件名;根据所述文件名,生成所述待导出数据的导出URL;根据所述导出URL,生成所需导出至的文件路径;根据所述待导出数据得到所述导出文件,将所述导出文件导出至所述文件路径。
现有技术的总业务service(相当于本发明实施例的管理功能类)在每个if-else中需要调用所对应需求模板的模板service中的方法,将所有具体实现的底层结构与上一层级的判断功能杂糅在同一层级(例如,全部位于总业务service的getAppscene方法中),使得该部分代码的整体结构冗杂,不便于快速阅读和修改,软件系统出现问题的几率较高,可扩展性和可维护性差。例如,对导出数据库管理系统Access的数据,指定调用Access模板service类中的accessInfo方法具体实现导出,具体如下:
if(ProductSpeEnum.ACCESS.getName().equals(productSpe)){
res=engineeringAppsceneAccessService.accessInfo(codesk);
}
当需要新增需求模板时,必须逐一查看以上if-else判断中调用导出部分的代码并完全理解,且必须逐一查看各个模板service及所对应获取导入信息方法(如accessInfo方法)中的内容,再进行相应的改动;由于一个需求模板的数据格式往往不相同,还需要查看并完全理解导出不同格式数据的大量if-else;导致该软件系统的可维护性较差,开发人员实现该操作耗时过长,提高了软件系统出现问题的几率。
如图5所示,为了提高软件系统的可扩展性和可维护性,本发明实施例使用抽象工厂将不同需求模板进行集中管理,一种需求模板对应一个具体工厂,所有具体工厂均由所述管理功能类统一管理。
本发明实施例通过实现抽象工厂(需求产品接口,如图5中ProductSpe)及其管理功能类(如图5中NetDocumentExportFactory),判断需要导出的需求模板,将导出任务分配给具体工厂实现;管理功能类相当于字典的目录,统一管理具体工厂。
例如,在管理功能类中,对导出数据库管理系统Access的数据,使用Access模板的具体工厂进行导出,具体如下:
if(ProductSpeEnum.ACCESS.getName().equals(productSpe)){
return new Access(codesk);}
具体判断所需的需求模板的if-else不可避免,但本发明实施例创建了一系列(即,每个if或else中的)相互依赖的接口,将具体实现导出的代码进行隔离,通过代码的结构设计,在判断选用的需求模板的代码中,屏蔽了具体实现的底层细节,使得在管理功能类中,无需具体调用某一个具体的模板service类,即可根据需求模板获取相应的导出文件,体现了更好的封装性和解耦性。
本发明实施例提供了一种管理功能类的实例,具体如下:
/>
在使用管理功能类集中管理的基础上,为了新增需求模板,如图6所示,还包括:
在步骤401中,当需要新增需求模板时,在所述管理功能类的getNetDocument方法中,添加第一操作代码,所述第一操作代码用于根据所述导出条目ID,从相应的具体工厂中得到新增的需求模板所对应的导出文件。
其中,使用本发明实施例的实现方法,当需要新增需求模板时,开发人员不必关注和完全理解这些被屏蔽的底层细节,仅需在该管理功能类中,参照已存在模板(例如,上述Access模板),根据新增的需求模板(例如,CDN模板)的名称,添加对应的第一操作代码进行返回,第一操作代码例如,
“if(ProductSpeEnum.CDN.getName().equals(productSpe)){
return new CDN(codesk);
}”。
在步骤402中,创建新增的需求模板的具体工厂。
在步骤403中,在具体工厂中,添加第二操作代码,所述第二操作代码用于根据所述新增的需求模板将所述待导出数据导出。
当需要新增需求模板时,开发人员仅需关注新增模板的实体化操作(即具体实现的底层细节),创建具体工厂,即创建新增模板对应的具体实现类(即新增类),进而在该具体实现类中编写包含该实体化操作的所对应方法(即添加第二操作代码)。
为了创建具体工厂,如图7所示,所述步骤403中包括:
在步骤4031中,创建抽象工厂的新增类Template,作为所述新增的需求模板的具体工厂。
需要说明的是,为了便于说明,此处将新增类和构造函数的名称描述为Template,但不应作为对新增类和构造函数的具体名称的限定;新增类和构造函数的具体名称仅需保持一致即可,由本领域技术人员根据新增的需求模板的名称进行选择,在此不作限定。新增的需求模板的具体工厂与已存在的具体工厂完全一样,均在构造函数中实现需求产品接口的export方法。
本发明实施例通过抽象工厂,实现在新增需求模板时,无需修改原有的代码,也无需翻看或完全理解管理功能类和具体需求模板所对应的导出方法中的代码,即可新增需求模板及所对应的导出功能。
在步骤4032中,所述具体工厂中创建构造函数Template;在所述构造函数Template中添加获取待导出数据的基础信息的操作代码,以及添加根据基础信息获取待导出数据的操作代码。
在步骤4033中,确定所述新增的需求模板的至少一个新增数据格式。
在步骤4034中,在所述构造函数Template中创建所述新增类Template的export方法,添加根据所述新增数据格式将所述待导出数据导出的操作代码,以实现需求产品接口中的export方法。
当需要新增模板时,直接再次实现ProductSpe抽象接口(即创建具体工厂),并将实体化操作加入该创建的具体工厂中即可。无需改动调用导出部分的代码,使得整体结构清晰,并屏蔽了部分底层结构,让代码具有可扩展性和可维护性。本发明实施例提供了一种新增的需求模板为CDN模板时,创建的具体工厂,具体如下:
/>
本发明实施例的多模板导出的实现方法,使用抽象工厂将不同需求模板进行集中管理,使导出功能相关代码的整体结构清晰明了,便于改动、增加和维护,提升了开发人员编写代码的效率,提高了软件系统的可维护性与可拓展性;同时极大地减少了相似冗余代码,降低了导出功能发生错误的概率。
实施例2:
本实施例还针对特定的原始导出代码集生成通用导出模板的应用场景,提供了一种多模板导出的实现方法,如图8所示,具体而言,由于经常会存在针对某一特定的具体表格进行导出的需求,而基于具有不同固有属性(格式、内容等特性)的不同具体表格,对于获取数据对象和使用某种导出方式进行数据对象的导出等步骤,又存在相应的不同的功能需求,在这个实际使用场景下,往往能够得到多套针对不同的具体表格的固有属性编写的原始导出代码集。
对于固有属性存在重叠或相似的具体表格,原始导出代码集中可能存在多次执行的类似操作代码。为了避免每次导出一个具体表格就需要重新编写一套原始导出代码集,从多套用于导出具体表格的原始导出代码集中,获取所需复用的原始导出代码集和所述原始导出代码集对应的具体表格;即,从多套针对某一种固有属性编写的原始导出代码集中,根据实际需求选择几种复用性较高的原始导出代码集,将其作为通用导出模板使用。由于原始导出代码集是针对某一具体表格进行编写的,所以往往会使用对参数直接赋值的形式进行相应功能的代码编写;若直接将其作为通用导出模板使用,其中极有可能存在具体数值(行数量、列数量和列关键词等)无法通用的情况,导致使用原始导出代码不适用于其他具体表格的导出。
本实施例结合所述具体表格,对所述原始导出代码集进行智能分析,以根据所述原始导出代码集生成对应的通用导出模板;其中,所述原始导出代码集包括用于导出所述具体表格的全部程序指令集,以及所述全部程序指令集所涉及的调用库。
下面对结合具体表格对原始导出代码集进行智能分析并生成通用导出模板的过程进行说明,所述多模板导出的实现方法还包括:
在步骤501中,当指定用所述原始导出代码集生成通用导出模板时,对于原始导出代码集中的每一个数据对象,通过依次执行所述原始导出代码集中的每一行原始操作代码,确定所述数据对象与相应的原始操作代码对应的执行结果之间的关联关系。在可获取原始导出代码集和具体表格,且能够对该全部程序指令集进行相应的编译的情况下,针对某一个数据对象,通过顺序执行原始操作代码,得到该数据对象在原始导出代码集每一次出现时对应的执行结果。基于智能计算,本实施例可根据该数据对象出现的位置与执行结果,学习得到该数据对象在原始导出代码集中的数据传递、调用及处理过程,该数据传递、调用及处理过程即为关联关系。例如,针对第三行第三列中的参数a,可以得到参数a在原始导出代码集中所出现的第一个位置和第二个位置(参数a在原始导出代码集中一共出现两次),顺序执行每一行原始操作代码,对于第一个位置中,确定参数a在每一行原始操作代码中的使用方法,和该第一个位置对应的这一行原始操作代码的执行结果;对于第二个位置中,确定参数a在每一行原始操作代码中的使用方法,和该第二个位置对应的这一行原始操作代码的执行结果;即得到了在以上两个位置(原始导出代码集)中参数a数据传递、调用及处理过程。
在步骤502中,根据所述关联关系,确定所述数据对象所代表的含义;由于本实施例基于智能计算,可根据该数据对象的关联关系,以及每一行原始操作代码,学习得到该数据对象在原始操作代码中所代表的含义,即所起到的作用。得到含义后,本实施例对于该数据对象等同想表示的含义,通过搜索生成等方式,根据所述含义与所述原始导出代码集,生成至少一套通用操作代码;所述通用操作代码用于替换对应的原始操作代码,将所述含义以变量参数、函数和程序指令的形式表达。
在步骤503中,显示所述原始导出代码集,在可选的实施例中,在集成开发环境(Integrated Development Environment,简写为IDE)中显示;对于其中携带该数据对象的地方,均以复选框或注释的方式,在所述数据对象之后罗列出所生成的通用操作代码;当通过勾选或双击注释等方式确定最终用于替换该数据对象的通用操作代码后,使用选择的通用操作代码替换所述数据对象。
在步骤504中,当所述原始导出代码集中的每一个数据对象均被替换为通用操作代码时,得到目标导出代码集,将所述目标导出代码集作为所述通用导出模板。
以下是一个原始导出代码集的全部程序指令集的具体实例:
public class ExcelReader{
public static void main(String[]args){
try{
FileInputStream file=new FileInputStream(new File("example.xlsx"));
Workbook workbook=new XSSFWorkbook(file);
Sheet datatypeSheet=workbook.getSheetAt(0);
Row datatypeRow=datatypeSheet.getRow(5);//获取第6行,因为索引从0开始
Cell datatypeCell=datatypeRow.getCell(1);//获取第B列,因为索引从0开始
在原始导出代码集中,针对原始操作代码“Row datatypeRow=datatypeSheet.getRow(5);”中的数据对象参数“5”,以及原始操作代码“CelldatatypeCell=datatypeRow.getCell(1);”中的数据对象参数“1”,本实施例通过对照具体表格的格式确定参数“5”和参数“1”的来源,对照具体表格的中的数据内容与参数“5”和参数“1”的在原始导出代码集中多个中间执行结果等过程,分别分析参数“5”和参数“1”在原始导出代码集顺序执行过程中存在的关联关系,确定参数“5”代表该具体表格的第6行,参数“1”代表该具体表格的第B列,所以在需要将其转换为通用的模板时,需要生成通用为获取任一行任一列数据的通用操作代码。如图10所示,在可选的实施例中,当光标移动至参数“5”后时,使用复选框的形式提示生成的可选的3个通用操作代码,通过打钩的方式选取通用操作代码2用于替换;其中,通用操作代码2可以为初始化变量“x”,通过变量“x”从其他函数中获取当前所需导出的数据行,并在“Row datatypeRow=datatypeSheet.getRow(5);”中使用变量“x”替换参数“5”。同理替换参数“1”后,替换后不存在无法通用的数据对象,即得到目标导出代码集,将其作为通用导出模板。
实施例3:
如图11所示,是本发明实施例的多模板导出的实现装置中控制设备的架构示意图。本实施例的控制设备包括一个或多个处理器31以及存储器32。其中,图11中以一个处理器31为例。
处理器31和存储器32可以通过总线或者其他方式连接,图11中以通过总线连接为例。
存储器32作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的多模板导出的实现方法。处理器31通过运行存储在存储器32中的非易失性软件程序和指令,从而执行多模板导出的实现方法。
存储器32可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器32可选包括相对于处理器31远程设置的存储器,这些远程存储器可以通过网络连接至处理器31。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器32中,当被所述一个或者多个处理器31执行时,执行上述实施例1中的多模板导出的实现方法,例如,执行以上描述的图2-图4和图6-图8所示的各个步骤。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种多模板导出的实现方法,其特征在于,抽象出导出功能,并定义抽象工厂,包括:
抽象导出模块获取待导出数据的导出条目ID,将所述导出条目ID传入至抽象工厂;
所述抽象工厂的管理功能类根据所述导出条目ID获取需求模板,将所述导出条目ID传入至所述需求模板所对应的具体工厂;
所述具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件,将所述导出文件返回至所述抽象导出模块,以通过抽象导出模块实现导出。
2.根据权利要求1所述的多模板导出的实现方法,其特征在于,所述抽象工厂为需求产品接口;所述具体工厂根据所述导出条目ID,导出所述待导出数据所对应的导出文件包括:
所述具体工厂的构造函数根据所述导出条目ID获取所述待导出数据的基础信息,根据所述基础信息,获取所述待导出数据;
确定所述待导出数据的至少一个导出数据格式;
所述构造函数根据所述导出数据格式,得到所述具体工厂的具体生产者;
所述具体生产者根据所述导出数据格式,将所述待导出数据导出,得到导出文件。
3.根据权利要求2所述的多模板导出的实现方法,其特征在于,所述构造函数根据所述导出数据格式,得到所述具体工厂的具体生产者包括:
在所述构造函数中,创建所述具体工厂的export方法;其中,所述具体工厂的export方法为所述具体工厂中的具体生产者;
在所述具体工厂的export方法中,添加根据导出数据格式将所述待导出数据导出的操作代码。
4.根据权利要求2所述的多模板导出的实现方法,其特征在于,所述具体生产者根据所述导出数据格式,将所述待导出数据导出,得到导出文件包括:
将所述待导出数据的导入数据格式与所述具体工厂的export方法中的导出数据格式进行匹配,确定所需的导出数据格式;
根据所述所需的导出数据格式所对应的操作代码,将所述待导出数据以所述所需的导出数据格式导出,得到导出文件。
5.根据权利要求4所述的多模板导出的实现方法,其特征在于,所述根据所述所需的导出数据格式所对应的操作代码,将所述待导出数据以所述所需的导出数据格式导出,得到导出文件包括:
获取预设格式的当前时间字段;根据所述当前时间字段,生成文件名;
根据所述文件名,生成所述待导出数据的导出URL;
根据所述导出URL,生成所需导出至的文件路径;
根据所述待导出数据得到所述导出文件,将所述导出文件导出至所述文件路径。
6.根据权利要求1所述的多模板导出的实现方法,其特征在于,一种需求模板对应一个具体工厂,所有具体工厂均由所述管理功能类统一管理。
7.根据权利要求6所述的多模板导出的实现方法,其特征在于,还包括:
当需要新增需求模板时,在所述管理功能类的getNetDocument方法中,添加第一操作代码,所述第一操作代码用于根据所述导出条目ID,从相应的具体工厂中得到新增的需求模板所对应的导出文件;
创建新增的需求模板的具体工厂;
在具体工厂中,添加第二操作代码,所述第二操作代码用于根据所述新增的需求模板将所述待导出数据导出。
8.根据权利要求7所述的多模板导出的实现方法,其特征在于,所述在具体工厂中,添加第二操作代码包括:
创建抽象工厂的新增类Template,作为所述新增的需求模板的具体工厂;
所述具体工厂中创建构造函数Template;在所述构造函数Template中添加获取待导出数据的基础信息的操作代码,以及添加根据基础信息获取待导出数据的操作代码;
确定所述新增的需求模板的至少一个新增数据格式;
在所述构造函数Template中创建所述新增类Template的export方法,添加根据所述新增数据格式将所述待导出数据导出的操作代码,以实现需求产品接口中的export方法。
9.一种多模板导出的实现方法,其特征在于,从多套用于导出具体表格的原始导出代码集中,获取所需复用的原始导出代码集和所述原始导出代码集对应的具体表格;结合所述具体表格,对所述原始导出代码集进行智能分析,以根据所述原始导出代码集生成对应的通用导出模板;其中,所述原始导出代码集包括用于导出所述具体表格的全部程序指令集,以及所述全部程序指令集所涉及的调用库;所述多模板导出的实现方法还包括:
当指定用所述原始导出代码集生成通用导出模板时,对于原始导出代码集中的每一个数据对象,通过依次执行所述原始导出代码集中的每一行原始操作代码,确定所述数据对象与相应的原始操作代码对应的执行结果之间的关联关系;
根据所述关联关系,确定所述数据对象所代表的含义;根据所述含义与所述原始导出代码集,生成至少一套通用操作代码;所述通用操作代码用于替换对应的原始操作代码,将所述含义以变量参数、函数和程序指令的形式表达;
显示所述原始导出代码集,以复选框或注释的方式,在所述数据对象之后罗列出所生成的通用操作代码;使用选择的通用操作代码替换所述数据对象;
当所述原始导出代码集中的每一个数据对象均被替换为通用操作代码时,得到目标导出代码集,将所述目标导出代码集作为所述通用导出模板。
10.一种多模板导出的实现装置,其特征在于,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于实现权利要求1-9任一所述的多模板导出的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410156397.7A CN117971207A (zh) | 2024-02-02 | 2024-02-02 | 一种多模板导出的实现方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410156397.7A CN117971207A (zh) | 2024-02-02 | 2024-02-02 | 一种多模板导出的实现方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117971207A true CN117971207A (zh) | 2024-05-03 |
Family
ID=90852717
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410156397.7A Pending CN117971207A (zh) | 2024-02-02 | 2024-02-02 | 一种多模板导出的实现方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117971207A (zh) |
-
2024
- 2024-02-02 CN CN202410156397.7A patent/CN117971207A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7673282B2 (en) | Enterprise information unification | |
CN103412853B (zh) | 一种针对文档转换器的测试用例自动生成方法 | |
JP5354602B2 (ja) | プロデューサグラフ指向のプログラミング及び実行 | |
US8112738B2 (en) | Apparatus and method of customizable model import and export to and from XML schema formats | |
CN101887365B (zh) | 用于构造基于组件的应用的可执行代码的方法和编译器 | |
CN101271475B (zh) | 一种商业智能系统 | |
US20080091720A1 (en) | Collaborative Derivation Of An Interface And Partial Implementation Of Programming Code | |
Acar et al. | A Graph Model of Data and Workflow Provenance. | |
CN103778107A (zh) | 一种基于excel快速动态生成表单的方法与平台 | |
US8037039B2 (en) | Runtime class database operation | |
US20050108684A1 (en) | Method and system for generating an application object repository from application framework metadata | |
CN103514223A (zh) | 一种数据仓库数据同步方法和系统 | |
CN102708203A (zh) | 一种基于xml元数据的数据库动态管理方法 | |
CN103049251A (zh) | 一种数据库持久层装置及数据库操作方法 | |
US20220269702A1 (en) | Intelligent annotation of entity-relationship data models | |
CN112764743B (zh) | 一种基于数据模型驱动自动生成软件的方法 | |
US9373093B2 (en) | Gateway service manager for business object applications | |
CN110889013A (zh) | 一种基于xml的数据关联方法、装置、服务器及存储介质 | |
CN103678396A (zh) | 一种基于数据模型的数据备份方法和装置 | |
US7631003B2 (en) | Automated transformation for style normalization of schemas | |
US20070038666A1 (en) | Independent explicit interface implementation | |
CN105550176A (zh) | 一种关系数据库与xml的基本映射方法 | |
CN115713309A (zh) | 内审系统 | |
CN108845793B (zh) | 一种orm设计方法及装置 | |
CN115907938A (zh) | 金融管理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |