CN116560629A - 一种数据传输对象的序列化方法、装置、介质和设备 - Google Patents
一种数据传输对象的序列化方法、装置、介质和设备 Download PDFInfo
- Publication number
- CN116560629A CN116560629A CN202310610849.XA CN202310610849A CN116560629A CN 116560629 A CN116560629 A CN 116560629A CN 202310610849 A CN202310610849 A CN 202310610849A CN 116560629 A CN116560629 A CN 116560629A
- Authority
- CN
- China
- Prior art keywords
- dto
- data structure
- model adapter
- window
- model
- 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 81
- 230000005540 biological transmission Effects 0.000 title claims abstract description 46
- 230000008569 process Effects 0.000 claims abstract description 23
- 230000009466 transformation Effects 0.000 claims abstract description 8
- 238000003860 storage Methods 0.000 claims description 25
- 230000006870 function Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 12
- 238000012546 transfer Methods 0.000 claims description 8
- 238000000605 extraction Methods 0.000 claims description 5
- 238000011161 development Methods 0.000 abstract description 2
- 238000005516 engineering process Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 7
- 238000012423 maintenance Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 4
- 230000003749 cleanliness Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000000873 masking effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000005304 joining Methods 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000009420 retrofitting Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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/541—Interprogram communication via adapters, e.g. between incompatible applications
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及金融科技技术领域,尤其涉及一种数据传输对象的序列化方法、装置、介质和设备。其中,方法包括:在第一数据传输对象DTO的序列化过程中,从第一DTO的初始序列中依次提取各数据结构目标;针对任一数据结构目标,确定数据结构目标对应的第二DTO及第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的;通过第二DTO对应的模型适配器对数据结构目标进行序列化改造,从而得到第一DTO的最终序列。通过上述方式,可以在对源代码无侵入的情况下对初始序列进行改造,降低了冗余代码开发的时间成本和人力成本,通过预设规则匹配的方式自动生成的模型适配器对初始序列进行改造,进而实现高效的数据传输。
Description
技术领域
本申请涉及金融科技技术领域,尤其涉及一种数据传输对象的序列化方法、装置、介质和设备。
背景技术
在企业的***中,不同团队开发的***接口定义不同,但是各个***之间的数据在日常的运营过程中需要交互使用,因此,需要统一接口规则之后才能进行数据传输。
例如,A***、B***和C***中均包含***信息,在A***中,***的存储格式为:"cardNo":"62XXX";在B***中***信息的存储格式为:"CARD_NO":"62XXX";在C***中***信息的存储格式为:"cardNumber":"62XXX",此时,要将A***、B***和C***中存储的***信息传输至Y***中,而Y***只能接收存储格式为“cardNo”的***信息,所以,要对B***和C***中的***信息的存储格式进行改造之后,在传输给Y***,Y***才可以接收。现有的方案中,通过修改B***和C***中的***信息对应的源代码,对***信息的存储格式进行改变。但是这种方式仅仅适用于数据量小,规则少的情形,一旦数据量较大,且要适配的规则较多,通过修改源代码的方式进行接口规则的统一,之后在进行传输,会耗费大量的人力物力。
基于此,目前亟需一种数据传输对象的序列化方法,用于提高***间数据传输的效率。
发明内容
本申请实施例提供一种方法、装置、介质和设备,用于提高***间数据传输的效率。
第一方面,本申请实施例提供一种数据传输对象的序列化方法,所述方法包括:在第一数据传输对象DTO的序列化过程中,从所述第一DTO的初始序列中依次提取各数据结构目标;针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的;通过所述第二DTO对应的模型适配器对所述数据结构目标进行序列化改造,从而得到所述第一DTO的最终序列。
通过上述方式,可以在对源代码无侵入的情况下对初始序列进行改造,降低了冗余代码开发的时间成本和人力成本,并且减少了出错的风险,提高了代码的整洁度。此外,模型适配器的配置方式更加灵活,可以深入到各个数据结构目标中,进行个性化配置。并且,模型适配器是根据预设规则自动生成的,不会随着预设规则条数的增多,而导致模型适配器生成效率降低。通过这种自动生成的模型适配器对初始序列进行改造,进而实现高效的数据传输。
一种可能的实现方式中,任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的,包括:针对任一DTO,若确定所述DTO不存在对应的模型适配器,则对所述DTO中的任一字段名,判断是否有与所述任一字段名匹配的预设规则;若有,则根据与所述任一字段名匹配的预设规则生成所述DTO对应的模型适配器。
通过上述方式,可以根据预设规则逐条与DTO进行匹配,从而确定与DTO对应的模型适配器,这个匹配过程由程序按照上述方式自动执行,不会受到规则条数的限制,确保序列化进程在时间复杂度上的稳定性。
一种可能的实现方式中,任一DTO对应的模型适配器是通过工厂模式的模型工厂生产的,包括:
获取多个模型适配器实现接口;
调用所述模型适配器实现接口的DTO获取函数,所述DTO获取函数用于获取所述任一DTO,并生成与所述任一DTO对应的模型适配器;
确定所述DTO不存在对应的模型适配器,包括:加载所述模型工厂中的各模型适配器至内存中;确定所述DTO在内存中不存在对应的模型适配器。
在模型工厂中,不同类型的模型适配器是由不同的工厂类生产的,不同的工厂类对外有相同的接口,其输入或者输出的内容遵循相同的规范。因此,可以动态增删一个工厂类上的模型适配器,而不影响其上下游的其他模型适配器的能力。
一种可能的实现方式中,所述第一DTO的初始序列中具有表征数据结构目标的预设符号;从所述第一DTO的初始序列中依次提取各数据结构目标,包括:按照所述预设符号,依次偏历所述第一DTO的初始序列,得到不同层级关系的各数据结构目标。
在上述方式中,各数据结构目标的计算量相加,仍然等于第一DTO的初始序列的计算量,因为在第一DTO的初始序列中,并不会重新遍历各数据结构目标,降低了计算量的时间复杂度。并且,由于现有技术是把第一DTO的初始序列中的内容当做字符串来处理,是按照字符串来提取数据结构目标的,这种方式会导致各个数据结构目标的重复滑动,增加了计算量。本实施例中,将第一DTO的初始序列中的内容结构化处理,利用数据结构目标的结构化特征,实现数据结构目标的高效获取。
一种可能的实现方式中,针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器,包括:针对不同层级关系的各数据结构目标,按照获得数据结构目标的先后顺序,依次确定每个数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器。
由于DTO分为不同的层级,那么其对应的初始序列中的数据结构目标也是分不同层级的。在上述方式中,可以按照获得目标数据结构的先后顺序确定对应的模型适配器,而不需要每次都输入完整的DTO重新解析获得模型适配器,减少了计算量。
一种可能的实现方式中,按照所述预设符号,依次偏历所述第一DTO的初始序列,得到不同层级关系的各数据结构目标,包括:
以所述第一DTO的初始序列中首个第一预设符号为第一窗口的始端,采用滑动窗口方式遍历所述初始序列;
若遍历到另一第一预设符号,则确定为所述第一窗口的末端及第二窗口的始端,继续遍历;
若遍历到第二预设符号,则将所述第二预设符号作为当前窗口的末端,从而得到当前窗口对应的数据结构目标;确定以所述当前窗口的始端为末端的前一窗口,将所述前一窗口的末端更新为所述当前窗口的末端,直至所述初始序列遍历结束。
通过上述方式,可以将第二窗口中的内容当成一个结构化的目标,在进行遍历时,由于已经遍历过一遍第二窗口,就可以直接根据第二窗口的结构使第一窗口跳过第二窗口,而无需重新遍历。
一种可能的实现方式中,得到当前窗口对应的数据结构目标之后,还包括:
存储当前窗口对应的数据结构目标,并将存储地址记录至所述前一窗口对应的数据结构目标中。
通过上述方式,将当前窗口中数据结构目标的地址存储在前一窗口中,不仅可以知道前一窗口中包含当前窗口,还可以在处理前一窗口时,随时取出当前窗口进行处理,提高了处理的效率。
一种可能的实现方式中,数据传输对象DTO为JAVA对象,第一数据传输对象DTO的序列化过程是通过序列化协议得到初始序列,并通过序列化协议中的注册接口调用各模型适配器。
在上述方式中,在序列化协议中预留了一个注册接口可以调用模型适配器,而没有对序列化协议直接进行改造,提高了模型适配器对于各种序列化协议的兼容度。
一种可能的实现方式中,所述方法还包括:
在全局配置文件中设置适用于所有DTO的模型适配器。
通过上述方式,可以节省开发业务代码的时间成本与人力成本,仅需要在配置文件中进行配置,降低了开发冗余代码出错的风险,也提升了代码的整洁度。
第二方面,本申请实施例提供一种数据传输对象的序列化装置,包括:
提取模块,用于在第一数据传输对象DTO的序列化过程中,从所述第一DTO的初始序列中依次提取各数据结构目标;
确定模块,用于针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的;通过所述第二DTO对应的模型适配器对所述数据结构目标进行序列化改造,从而得到所述第一DTO的最终序列。
一种可能的实现方式中,所述确定模块具体用于,针对任一DTO,若确定所述DTO不存在对应的模型适配器,则对所述DTO中的任一字段名,判断是否有与所述任一字段名匹配的预设规则;若有,则根据与所述任一字段名匹配的预设规则生成所述DTO对应的模型适配器。
一种可能的实现方式中,任一DTO对应的模型适配器是通过工厂模式的模型工厂生产的;所述确定模块具体用于:获取多个模型适配器实现接口;调用所述模型适配器实现接口的DTO获取函数,所述DTO获取函数用于获取所述任一DTO,并生成与所述任一DTO对应的模型适配器;所述确定模块具体还用于,加载所述模型工厂中的各模型适配器至内存中;确定所述DTO在内存中不存在对应的模型适配器。
一种可能的实现方式中,所述第一DTO的初始序列中具有表征数据结构目标的预设符号;所述提取模块具体用于,按照所述预设符号,依次偏历所述第一DTO的初始序列,得到不同层级关系的各数据结构目标。
一种可能的实现方式中,针对任一数据结构目标,所述确定模块具体用于,针对不同层级关系的各数据结构目标,按照获得数据结构目标的先后顺序,依次确定每个数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器。
一种可能的实现方式中,所述确定模块具体用于,以所述第一DTO的初始序列中首个第一预设符号为第一窗口的始端,采用滑动窗口方式遍历所述初始序列;若遍历到另一第一预设符号,则确定为所述第一窗口的末端及第二窗口的始端,继续遍历;若遍历到第二预设符号,则将所述第二预设符号作为当前窗口的末端,从而得到当前窗口对应的数据结构目标;确定以所述当前窗口的始端为末端的前一窗口,将所述前一窗口的末端更新为所述当前窗口的末端,直至所述初始序列遍历结束。
一种可能的实现方式中,所述确定模块还用于,存储当前窗口对应的数据结构目标,并将存储地址记录至所述前一窗口对应的数据结构目标中。
一种可能的实现方式中,数据传输对象DTO为JAVA对象,第一数据传输对象DTO的序列化过程是通过序列化协议得到初始序列,并通过序列化协议中的注册接口调用各模型适配器。
一种可能的实现方式中,所述装置还包括设置模块,用于在全局配置文件中设置适用于所有DTO的模型适配器。
第三方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,当计算机程序被运行时,执行上述第一方面中任一项方法。
第四方面,本申请实施例提供一种计算设备,包括:存储器,用于存储程序指令;处理器,用于调用存储器中存储的程序指令,按照获得的程序执行上述第一方面中任一项设计中的方法。
第五方面,本申请实施例提供一种计算机程序产品,当计算机程序产品在处理器上运行时,实现如上述第一方面中任一项设计中的方法。
上述第二方面至第五方面的有益效果,具体可参照上述第一方面任一项设计可达到的有益效果,此处不再赘述。
附图说明
图1示例性示出本申请实施例提供的一种应用场景示意图;
图2示例性示出本申请实施例提供的一种序列化方法的流程示意图;
图3示例性示出本申请实施例提供的一种模型适配器的生成方法的流程示意图;
图4示例性示出本申请实施例提供的一种工厂模式的流程示意图;
图5示例性示出本申请实施例提供的一种获取各数据结构目标的方法流程示意图;
图6示例性示出本申请实施例提供的一种第一窗口和第二窗口的示意图;
图7示例性地示出本申请实施例提供的一种第二DTO与模型适配器对应的示意图;
图8示例性地示出本申请实施例提供的一种GSON协议的结构示意图;
图9示例性地示出本申请实施例提供的一种数据传输对象的序列化装置示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1示例性示出本申请实施例提供的一种应用场景示意图,如图1所示,包括A***、B***、C***和Y***,以及与Y***相连的一个应用程序(Application,APP),其中,Y***是一个综合***,用于维护前台的APP,在APP中可以展示***,A***、B***、C***是Y***的后台***,均包含***信息。因此,在用户点击APP的中的按钮需要展示***时,A***、B***、C***需要把***信息传输至Y***,Y***同步给APP。在各个***中***信息的存储格式如下表一所示:
表一
A*** | "cardNo":"62XXX" |
B*** | "CARD_NO":"62XXX" |
C*** | "cardNumber":"62XXX" |
Y*** | "cardNo":"62XXX" |
由表一可见,不同的***对于***的存储格式是不同的,这是由于不同团队在开发不同***时对于***信息字段名的定义是不同的,根据上述表格,A***输出接口输出的键值对为:"cardNo":"62XXX",B***输出接口输出的键值对为:"CARD_NO":"62XXX",C***输出接口输出的键值对为:"cardNumber":"62XXX"。而Y***的输入接口只能接收存储格式为"cardNo":"62XXX的***信息,因此,在传输***信息时,需要对各个***进行改造。下面介绍几种对***改造的方案。
方案一:
在Y***写冗余代码或者使用冗余策略来适配不同的***信息的存储格式。但是,当Y***对接的***越来越多时,其代码冗余策略就会变得越来越长,不利于阅读和后期维护。并且单个***的会随着***本身数量的增长而升高。例如,在一种互联网银行的***中,***维护的总成本=单个***的维护成本****数量,而***数量增加时,单个***的维护成本也会增加,导致,***维护的总成本也会增加。
基于上述方案一的弊端,可以考虑不对综合***进行改造,而是使所有与Y***对接的***都使用同样的存储格式,以减少信息传输和***维护的成本,提高信息传输的效率。基于此,提出如下方案二。
方案二:
首先,确定方案二要达到的目标,即B***和C***均可以输出"cardNo":"62XXX"格式的***信息。以B***为例,在其输出"CARD_NO":"62XXX"格式的***信息的同时,还需要输出"cardNo":"62XXX"格式的***信息,将原有的"CARD_NO":"62XXX"格式的***信息,定义为本名,将新加的"cardNo":"62XXX"格式的***信息定义为别名。即,B***要具有输出“本名+别名”的能力。
基于方案二要达到的目标,***信息的传输过程可以分为如下三个阶段:
(1)别名阶段
即上述目标中提到的,B***和C***可以输出“本名+别名”格式的键值对。B***的输出为"CARD_NO":"62XXX","cardNo":"62XXX";C***的输出为"cardNumber":"62XXX","cardNo":"62XXX";对于Y***不做改造。
(2)去存量阶段
Y***去掉冗余代码,只接收B***和C***中的"cardNo":"62XXX",不接收B***的"CARD_NO":"62XXX"以及C***的"cardNumber":"62XXX"。
(3)收敛收尾阶段
在B***中去掉"CARD_NO":"62XXX",在C***中去掉"cardNumber":"62XXX",均只返回"cardNo":"62XXX"的字段。
在上述三个阶段中,别名阶段的实现具有较高的技术难度,即如何让***输出本名+别名。基于此,可以有如下两种实现方式。
实现方式一:
在开发***的原始代码时,直接定义两个不同的字段,并为这两个字段赋相同的值。例如,在B***中,定义"CARD_NO"和"cardNo"两个字段,并为这两个字段均赋值为"62XXX";在C***中,定义"cardNumber"和"cardNo"两个字段,并为这两个字段均赋值为"62XXX"。由此,这两个***均可以输出本名+别名了。
实现方式二:
基于字符串匹配,用规则的字符串替换原有的字符串。这种实现方式是在原始代码序列化之后进行的,例如,对于B***,使用字符串"CARD_NO"在B***进行匹配,在匹配到"CARD_NO"时,直接将"CARD_NO":"62XXX"替换为"CARD_NO":"62XXX","cardNo":"62XXX";对于C***,使用字符串"cardNumber"在C***中进行匹配,在匹配到"cardNumber"时,直接将"cardNumber":"62XXX"替换为"cardNumber":"62XXX","cardNo":"62XXX"。
在上述实现方式一中,需要编写冗余代码,在需要别名的字段较多时,会导致冗余代码的数量非常庞大,出错的风险较大,且降低了灵活性和扩展性。
在上述实现方式二中,在有多条别名规则时,每一条规则都需要进行字符串匹配替换,对于大型***而言,字段的数量是非常庞大的,若需要替换的字段非常多,那么需要配置的规则数量也很多,就会导致在进行数据传输时,接口的性能极大地下降。
例如,一个***中存储的信息包含***信息、身份证号信息、账号信息,按照上述实现方式二,需要设置***规则、身份证号规则和账号规则,分别对***信息、身份证号信息和账号信息进行匹配替换,而实际应用中,要配置的规则条数是远远大于3的,因此,会导致***的输出接口的性能下降。
此外,实现方式二中的方案由于是进行字符串匹配,只要匹配到规则中规定的字符串,就要进行替换。因此,无法支持个性化的规则配置。
例如,张三的***列表和借记卡列表如下:
使用上述实现方式二中的方案对***字段进行改造,匹配的字符串为"CARD_NO",匹配过程是对上面的代码进行遍历,寻找所有的"CARD_NO",由于在借记卡字段中也包含了"CARD_NO"字段,因此,也会匹配到"CARD_NO":"62YYYY",由此,替换之后的代码如下:
可见,借记卡字段"debitCardList"中的"CARD_NO":"62YYYY"也被替换成了"CARD_NO":"62YYYY","cardNo":"62XXX",和既定的目标是不同的。
综上,在上述的两种方案中均无法高效准确地进行***输入接口能力的改造,使得***间信息传输的效率较低。并且,上述两种方案设计了相应的规则之后,只能适用设计好的规则,若要再引入其他的规则,则需要重新设计。例如,在上述的例子中,为***B和***C引入了添加别名能力,若要引入其他的能力,比如掩码能力,则只能重新开发,无法灵活配置。
基于此,本申请实施例提供了一种序列化方法,用于在序列化过程中,对传输接口进行改造,进而实现***间信息传输的效率,同时实现传输接口的灵活配置。
图2示例性示出本申请实施例提供的一种序列化方法的流程示意图,如图2所示,该方法包括:
步骤201,在第一数据传输对象(data transfer object,DTO)的序列化过程中,从第一DTO的初始序列中依次提取各数据结构目标。
序列化是将第一数据传输对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,第一数据传输对象将当前状态写入到临时或持久性存储区中。以后,可以从存储区中读取或反序列化第一数据传输对象的状态,重新创建该第一数据传输对象。
第一DTO的初始序列中包含多个数据结构目标,比如在一个用户的DTO中包含的数据结构目标有:姓名、年龄、性别、******、借记卡***等。一种可能的示例中,这些数据结构目标以键值对的形式存在,例如,关于姓名的数据结构目标可以为"name":"张三",关于年龄的数据结构目标可以为"age":"21,关于***的数据结构目标可以为"CARD_NO":"62XXX"。
步骤202,针对任一数据结构目标,确定数据结构目标对应的第二DTO及第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的。
任一DTO对应的模型适配器在生成之后,就和对应的DTO绑定了,即在确定了DTO之后,就可以确定与之对应的模型适配器。关于模型适配器的生成方式将在下面的步骤中详细介绍。
应理解,DTO可以是很多个层级的,本实施例中的第一DTO和第二DTO只是一个示例,第二DTO层级下,还可以包含第三DTO。
步骤203,通过第二DTO对应的模型适配器对数据结构目标进行序列化改造,从而得到第一DTO的最终序列。
仍然以上述关于***的数据结构目标"CARD_NO":"62XXX"的实例为例,***的数据结构目标对应的模型适配器中包含如下预设规则,即将"CARD_NO":"62XXX"变为"CARD_NO":"62XXX";"cardNO":"62XXX",那么在获取到数据结构目标"CARD_NO":"62XXX"之后,通过上述模型适配器,即可以将数据结构目标"CARD_NO":"62XXX"更改为"CARD_NO":"62XXX";"cardNO":"62XXX"。对各个数据结构目标进行上述类似的改造,即可得到第一DTO的最终序列。
通过上述方式,可以在对源代码无侵入的情况下对初始序列进行改造,降低了冗余代码开发的时间成本和人力成本,并且减少了出错的风险,提高了代码的整洁度。此外,模型适配器的配置方式更加灵活,可以深入到各个数据结构目标中,进行个性化配置。并且,模型适配器是根据预设规则自动生成的,不会随着预设规则条数的增多,而导致模型适配器生成效率降低。通过这种自动生成的模型适配器对初始序列进行改造,进而实现高效的数据传输。
在上述步骤202中,模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的,下面介绍模型适配器的具体生成方式。图3示例性示出本申请实施例提供的一种模型适配器的生成方法的流程示意图,如图3所示,该方法包括:
步骤301,获取任一DTO。
步骤302,判断DTO是否存在对应的模型适配器,若是,则执行步骤305;若否,则执行步骤303。
在一种可能的实现方式中,第一次获取到一种类型的DTO时,不存在与这个DTO对应的模型适配器,此时需要执行步骤303。在第二次获取到同类型的DTO时,已经生成了这个类型DTO对应的模型适配器,则执行步骤305。例如,对于一种用户类型的DTO,第一次获取到的DTO为张三DTO,此时,没有与张三DTO对应的模型适配器,要执行步骤303;第二次获取到李四DTO时,已经有了对应的模型适配器,执行步骤305。
步骤303,针对DTO中的任一字段名,判断是否有与任一字段名匹配的预设规则,若有,则执行步骤304。
示例性地,假设一个DTO中包含的字段名为字段1、字段2、字段3、字段4,预设的规则包含规则1、规则2。那么在本步骤中,首先,需要对字段1进行规则1和规则2的匹配;然后,对字段2进行规则1和规则2的匹配;接着,对字段3进行规则1和规则2的匹配;最后,对字段4进行规则1和规则2的匹配。上述过程可以使用循环结构进行,从字段1开始循环,直至字段4匹配完成,循环结束。
步骤304,根据与任一字段名匹配的预设规则生成DTO对应的模型适配器。
假设,在上述步骤303的示例中,字段4和规则2匹配,则将规则2放入与该DTO对应的模型适配器中。
步骤305,确定第二DTO对应的模型适配器。
需要说明的是,在编程语言中,模型适配器即为一个对象,在将规则2放入模型适配器之前,模型适配器为包含空值的代码,将规则2放入模型适配器,即将规则2的键值对放入原来为空值的代码处。将所有与第二DTO对应的规则均放入这个模型适配器的空值处后,即可以确定与第二DTO对应的模型适配器。
下面举一个具体的例子说明上述步骤301-步骤305。
在上述步骤301中,获取到的DTO为张三的DTO,该DTO中包含张三的全部信息,其中的字段名包含name、sexy、age、cardnumber,规则1为将“opendate:********”替换为“opendate:********”,“OPENDATE:********”,规则2为将“cardnumber:********”替换为“cardNO:********”通过上述步骤303中的过程字段名cardnumber和规则2匹配上,则在上述步骤304中,将规则2放入模型适配器中,从而生成与用户类型的DTO对应的模型适配器。此时,在获取到李四的DTO时,就可以直接执行步骤305。
一种可能的实现方式中,在上述步骤303中,可以使用反射机制对DTO进行解析,从而获得多个字段以及其中的字段名。反射机制是指在程序的运行状态中,可以构造任意一个类的数据传输对象,可以了解任意一个数据传输对象所属的类,以及任意一个类的成员变量和方法,并调用任意一个数据传输对象的属性和方法。
需要说明的是,在上述步骤303中,若匹配到0条规则,也会生成与DTO对应的模型适配器,这表示,对于该种类型的DTO没有与之对应的规则,不需要对该DTO进行改造。
进一步地,可以通过工厂模式的模型工厂执行上述步骤301-305,生产模型适配器。具体的,工厂模式下的模型工厂可以获取到多个模型适配器实现接口,也可以叫做工厂类,在模型工厂中,不同类型的模型适配器是由不同的工厂类生产的,不同的工厂类对外有相同的接口,其输入或者输出的内容遵循相同的规范。因此,可以动态增删一个工厂类上的模型适配器,而不影响其上下游的其他模型适配器的能力。
在生产模型适配器时,需要调用模型适配器实现接口的DTO获取函数,DTO获取函数可以获取任一DTO。例如“write()”函数,每个模型适配器实现接口都是通过“write()”获取DTO,因此,可以通过一个循环结构多次调用不同的模型适配器接口,进而在生产不同的模型适配器时,不需要编写与不同模型适配器对应的代码,只需要调用“write()”函数,就可以生成不同的模型适配器。
在此模式下,需要加载模型工厂中的各模型适配器至内存中之后,才能确定DTO在内存中是否存在对应的模型适配器,在不存在的情况下,重新生产与DTO对应的模型适配器。
图4示例性示出本申请实施例提供的一种工厂模式的流程示意图,如图4所示,第一DTO传输给模型工厂,并委托模型工厂分别加入别名能力和掩码能力,之后模型工厂可以自动创建别名模型适配器和掩码模型适配器。在创建的过程中,模型工厂中的每个模型适配器实现接口都遵循了模型适配器的创建规范,因此,可以查询到模型工厂中的所有模型适配器实现接口,进而得到一个模型适配器实现接口的列表,根据委托加入的能力,自动调用各个模型适配器实现接口生产不同的模型适配器。不同的模型适配器虽然具有个性化的功能,但是对于工厂是不可见的,因此,对于工厂来讲,生成的模型适配器是具有共性的,即它们都遵循了相同的规范。
通过上述方式,即可以实现对模型适配器的批量化生产,不需要每开发一个DTO就要开发与其对应的模型适配器。
在上述第一DTO的初始序列中具有表征数据结构目标的预设符号,按照预设符号可以依次偏历第一DTO的初始序列,得到不同层级关系的各数据结构目标。
上述过程具体可以参照如图5中的步骤执行,图5示例性示出本申请实施例提供的一种获取各数据结构目标的方法流程示意图,如图5所示,该方法包括:
步骤501,以第一DTO的初始序列中首个第一预设符号为第一窗口的始端,采用滑动窗口方式遍历初始序列;
步骤502,若遍历到另一第一预设符号,则确定为第一窗口的末端及第二窗口的始端,继续遍历;
步骤503,若遍历到第二预设符号,则将第二预设符号作为当前窗口的末端,从而得到当前窗口对应的数据结构目标;
步骤504,确定以当前窗口的始端为末端的前一窗口,将前一窗口的末端更新为当前窗口的末端,直至初始序列遍历结束。
图6示例性示出本申请实施例提供的一种第一窗口和第二窗口的示意图,如图6所示,第一预设符号为“{”,第一窗口从第一个“{”开始遍历初始序列;在遍历到另一个第一预设符号“{”时,打开第二窗口;在遍历到第二预设符号“}”时,将第二预设符号“}”作为当前窗口的末端,从而得到当前窗口对应的数据结构目标"CARD_NO":"62XX";之后,将第一窗口的末端更新为第二窗口的末端。即第一窗口可以直接越过第二窗口,滑动到第二窗口的末端在继续向下滑动。
在得到数据结构目标之后,还可以存储当前窗口对应的数据结构目标,并将存储地址记录至第一窗口对应的数据结构目标中。
例如,在上述图6中的示例中,存储的窗口2为{"CARD_NO":"62XX"},存储的窗口1为{"name":"张三","cardList":[窗口2]}。
在窗口滑动的过程中,可以通过如下方式实现将前一窗口的末端更新为当前窗口的末端。
设步骤1结束,窗口1的两端指针为[0,80],而窗口2的指针为[80,100],窗口1的末端指针和窗口2的末端指针相同,就可以直接将窗口1的末端指针更新为窗口2的末端指针,从而就实现了将窗口1跳转到了窗口2的末端。
在上述方式中,第一窗口和第二窗口的滑动计算量相加,仍然等于第一窗口的计算量,因为在第一窗口中,并没有重新滑动第二窗口,降低了计算量的时间复杂度。并且,由于现有技术是把窗口中的内容当做字符串来处理,是按照字符串来提取数据结构目标的,这种方式会导致各个窗口内容的重复滑动,增加了计算量。本实施例中,将窗口中的内容结构化处理,利用数据结构目标的结构化特征,实现数据结构目标的高效获取。
在上述实施例的基础上,针对不同层级关系的各数据结构目标,可以按照获得数据结构目标的先后顺序,依次确定每个数据结构目标对应的第二DTO及第二DTO对应的模型适配器。图7示例性地示出本申请实施例提供的一种第二DTO与模型适配器对应的示意图,如图7所示,在第一DTO的初始序列中,设有两个层级的数据结构目标,数据结构目标1和数据结构目标2,延续上述的具体实例,数据结构目标1可以为窗口2中的内容,即:"CARD_NO":"62XX",数据结构目标2可以为窗口1中的内容,即:"name":"张三","cardList":[窗口2],根据上述窗口滑动的顺序,先得到数据结构目标1,再得到数据结构目标2。得到数据结构目标1之后,可以确定与数据结构目标1对应的第二DTO1,和与第二DTO1对应的模型适配器1,之后,通过模型适配器1对数据结构目标1进行序列化;在得到数据结构目标2之后,可以确定与数据结构目标2对应的第二DTO2,和与第二DTO2对应的模型适配器2,之后,通过模型适配器2对数据结构目标2进行序列化。在数据结构目标1和数据结构目标2均序列化完成,就得到了最终序列。
一种可能的实现方式中,解析数据结构目标和解析第二DTO确定模型适配器的过程可以是同步进行的,由此可以提高序列化的效率。
一种可能的实现方式中,数据传输对象DTO可以为JAVA对象,第一数据传输对象DTO的序列化过程通过GSON协议得到初始序列,并通过序列化协议中的注册接口调用各模型适配器,对初始序列进行再次改造,从而得到最终序列。GSON是Google提供的用来在JAVA对象和JSON序列之间进行映射的JAVA工具类库。JAVA开发工程师借助GSON或者其它工具类库将JAVA对像转换为JSON序列,进而实现与其它***通信时的数据格式要求。
图8示例性地示出本申请实施例提供的一种GSON协议的结构示意图,如图8所示,JAVA对象通过GSON协议得到初始序列。在GSON协议中,预留了一个注册接口,这个注册接口不实现具体的内容,开发者可以通过该接口来扩展能力。本实施例中,为这个注册接口约定了重写能力,即重写初始字符串的能力,通过这个注册接口,可以调用模型适配器,模型适配器的入参包括JAVA对象和对JAVA对象对应的初始序列。通过模型适配器可以实现别名能力、敏感字段掩码能力,数字截取能力和枚举自动转换能力等。在为模型适配器加入这些能力时,可以通过前述的工厂模式实现。
进一步地,可以通过该注册接口,可以实现对每种能力的统一管理,在工厂模式下,不需要某种能力时,可以及时下线对应的模型适配器,而不需要在各代码处修改,从而实现对初始序列的高效改造。
具体的,可以通过模型工厂中的总开关控制各种能力是否生效。比如,配置别名能力=true时,别名能力是生效的,当别名能力=fasle时,***守护线程中的工作轮询,会在预设时内检测到,然后在工厂内将别名能力对应的一系列模型适配器注销,后续再进行序列化时,就不会对初始序列进行别名。这个开关仅仅会影响别名能力,而不会影响其他能力,如掩码能力还是继续存在的,可以对敏感字段进行掩码。
除了为模型配置器配置开关外,还可以将在全局文件中设置适用于所有DTO的模型适配器,例如,对所有DTO都生效的别名规则,在全局文件中配置实现为:“GlobalAliasName:CARD_NO-cardNo”。此外,对单个DTO的单个字段生效的别名能力的配置方案可以为:“@AliasName(value="CARD_NO",Alias={"cardNo"})”。
通过上述方式,可以节省开发业务代码的时间成本与人力成本,仅需要在配置文件中进行配置,降低了开发冗余代码出错的风险,也提升了代码的整洁度。
基于相同的技术构思,本申请实施例还提供了一种数据传输对象的序列化装置。图9示例性地示出本申请实施例提供的一种数据传输对象的序列化装置示意图,该装置可以执行前述的一种数据传输对象的序列化方法,如图9所示,该装置包括:
提取模块,用于在第一数据传输对象DTO的序列化过程中,从所述第一DTO的初始序列中依次提取各数据结构目标;
确定模块,用于针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的;通过所述第二DTO对应的模型适配器对所述数据结构目标进行序列化改造,从而得到所述第一DTO的最终序列。
一种可能的实现方式中,所述确定模块具体用于,针对任一DTO,若确定所述DTO不存在对应的模型适配器,则对所述DTO中的任一字段名,判断是否有与所述任一字段名匹配的预设规则;若有,则根据与所述任一字段名匹配的预设规则生成所述DTO对应的模型适配器。
一种可能的实现方式中,任一DTO对应的模型适配器是通过工厂模式的模型工厂生产的所述确定模块具体用于:获取多个模型适配器实现接口;调用所述模型适配器实现接口的DTO获取函数,所述DTO获取函数用于获取所述任一DTO,并生成与所述任一DTO对应的模型适配器;所述确定模块具体还用于,加载所述模型工厂中的各模型适配器至内存中;确定所述DTO在内存中不存在对应的模型适配器。
一种可能的实现方式中,所述第一DTO的初始序列中具有表征数据结构目标的预设符号;所述提取模块具体用于,按照所述预设符号,依次偏历所述第一DTO的初始序列,得到不同层级关系的各数据结构目标。
一种可能的实现方式中,针对任一数据结构目标,所述确定模块具体用于,针对不同层级关系的各数据结构目标,按照获得数据结构目标的先后顺序,依次确定每个数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器。
一种可能的实现方式中,所述确定模块具体用于,以所述第一DTO的初始序列中首个第一预设符号为第一窗口的始端,采用滑动窗口方式遍历所述初始序列;若遍历到另一第一预设符号,则确定为所述第一窗口的末端及第二窗口的始端,继续遍历;若遍历到第二预设符号,则将所述第二预设符号作为当前窗口的末端,从而得到当前窗口对应的数据结构目标;确定以所述当前窗口的始端为末端的前一窗口,将所述前一窗口的末端更新为所述当前窗口的末端,直至所述初始序列遍历结束。
一种可能的实现方式中,所述确定模块还用于,存储当前窗口对应的数据结构目标,并将存储地址记录至所述前一窗口对应的数据结构目标中。
一种可能的实现方式中,数据传输对象DTO为JAVA对象,第一数据传输对象DTO的序列化过程是通过序列化协议得到初始序列,并通过序列化协议中的注册接口调用各模型适配器。
一种可能的实现方式中,所述装置还包括设置模块,用于在全局配置文件中设置适用于所有DTO的模型适配器。
基于相同的技术构思,本发明实施例还提供了一种计算机程序产品,当所述计算机程序产品在处理器上运行时,实现上述实施例中所示的方法。
基于相同的技术构思,本发明实施例还提供了一种计算设备,包括:存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述实施例中所示的方法。
基于相同的技术构思,本发明实施例还提供了一种计算机可读存储介质,当所述计算机程序产品在处理器上运行时,实现上述实施例中所示的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (12)
1.一种数据传输对象的序列化方法,其特征在于,所述方法包括:
在第一数据传输对象DTO的序列化过程中,从所述第一DTO的初始序列中依次提取各数据结构目标;
针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的;通过所述第二DTO对应的模型适配器对所述数据结构目标进行序列化改造,从而得到所述第一DTO的最终序列。
2.如权利要求1所述的方法,其特征在于,任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的,包括:
针对任一DTO,若确定所述DTO不存在对应的模型适配器,则对所述DTO中的任一字段名,判断是否有与所述任一字段名匹配的预设规则;
若有,则根据与所述任一字段名匹配的预设规则生成所述DTO对应的模型适配器。
3.如权利要求2所述的方法,其特征在于,任一DTO对应的模型适配器是通过工厂模式的模型工厂生产的,包括:
获取多个模型适配器实现接口;
调用所述模型适配器实现接口的DTO获取函数,所述DTO获取函数用于获取所述任一DTO,并生成与所述任一DTO对应的模型适配器;
确定所述DTO不存在对应的模型适配器,包括:
加载所述模型工厂中的各模型适配器至内存中;
确定所述DTO在内存中不存在对应的模型适配器。
4.如权利要求1所述的方法,其特征在于,所述第一DTO的初始序列中具有表征数据结构目标的预设符号;
从所述第一DTO的初始序列中依次提取各数据结构目标,包括:
按照所述预设符号,依次偏历所述第一DTO的初始序列,得到不同层级关系的各数据结构目标。
5.如权利要求4所述的方法,其特征在于,针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器,包括:
针对不同层级关系的各数据结构目标,按照获得数据结构目标的先后顺序,依次确定每个数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器。
6.如权利要求4所述的方法,其特征在于,按照所述预设符号,依次偏历所述第一DTO的初始序列,得到不同层级关系的各数据结构目标,包括:
以所述第一DTO的初始序列中首个第一预设符号为第一窗口的始端,采用滑动窗口方式遍历所述初始序列;
若遍历到另一第一预设符号,则确定为所述第一窗口的末端及第二窗口的始端,继续遍历;
若遍历到第二预设符号,则将所述第二预设符号作为当前窗口的末端,从而得到当前窗口对应的数据结构目标;
确定以所述当前窗口的始端为末端的前一窗口,将所述前一窗口的末端更新为所述当前窗口的末端,直至所述初始序列遍历结束。
7.如权利要求6所述的方法,其特征在于,得到当前窗口对应的数据结构目标之后,还包括:
存储当前窗口对应的数据结构目标,并将存储地址记录至所述前一窗口对应的数据结构目标中。
8.如权利要求1-7中任一项所述的方法,其特征在于,数据传输对象DTO为JAVA对象,
第一数据传输对象DTO的序列化过程通过序列化协议得到初始序列,并通过序列化协议中的注册接口调用各模型适配器。
9.如权利要求1-7中任一项所述的方法,所述方法还包括:
在全局配置文件中设置适用于所有DTO的模型适配器。
10.一种数据传输对象的序列化装置,其特征在于,所述装置包括:
提取模块,用于在第一数据传输对象DTO的序列化过程中,从所述第一DTO的初始序列中依次提取各数据结构目标;
确定模块,用于针对任一数据结构目标,确定所述数据结构目标对应的第二DTO及所述第二DTO对应的模型适配器;任一DTO对应的模型适配器是根据该DTO中至少一个字段名匹配的预设规则生成的;通过所述第二DTO对应的模型适配器对所述数据结构目标进行序列化改造,从而得到所述第一DTO的最终序列。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被运行时,执行如权利要求1至9中任一项所述的方法。
12.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行如权利要求1至9中任一项权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310610849.XA CN116560629A (zh) | 2023-05-25 | 2023-05-25 | 一种数据传输对象的序列化方法、装置、介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310610849.XA CN116560629A (zh) | 2023-05-25 | 2023-05-25 | 一种数据传输对象的序列化方法、装置、介质和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116560629A true CN116560629A (zh) | 2023-08-08 |
Family
ID=87486077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310610849.XA Pending CN116560629A (zh) | 2023-05-25 | 2023-05-25 | 一种数据传输对象的序列化方法、装置、介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116560629A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116932615A (zh) * | 2023-09-19 | 2023-10-24 | 北京城建智控科技股份有限公司 | 自适应协议的数据序列化方法及装置 |
-
2023
- 2023-05-25 CN CN202310610849.XA patent/CN116560629A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116932615A (zh) * | 2023-09-19 | 2023-10-24 | 北京城建智控科技股份有限公司 | 自适应协议的数据序列化方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7861222B2 (en) | Discoscript: a simplified distributed computing scripting language | |
CN110554958B (zh) | 图数据库测试方法、***、设备和存储介质 | |
US20110106776A1 (en) | Incremental implementation of undo/redo support in legacy applications | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN109740122A (zh) | 思维导图用例文件的转换方法及装置 | |
CN117238433B (zh) | 基于LibreOffice进行文档数据自动隔离的方法 | |
CN116560629A (zh) | 一种数据传输对象的序列化方法、装置、介质和设备 | |
US20220247583A1 (en) | Method for the execution of an instance of a smart contract by means of a blockchain | |
CN115408391A (zh) | 一种数据库表变更方法、装置、设备和存储介质 | |
CN112039975A (zh) | 一种报文字段的处理方法、装置、设备及存储介质 | |
CN113407565B (zh) | 跨库数据查询方法、装置和设备 | |
CN113326026B (zh) | 一种微服务业务流程接口的生成方法与终端 | |
JP2023553220A (ja) | マルチインスタンスプロセスのためのプロセスマイニング | |
CN116302328A (zh) | 智能合约数据处理方法和*** | |
CN114168119B (zh) | 代码文件编辑方法、装置、电子设备以及存储介质 | |
CN109697216B (zh) | 清算交易信息处理方法、装置及*** | |
CN115114297A (zh) | 数据轻量存储及查找方法、装置、电子设备及存储介质 | |
CN111880803B (zh) | 一种应用于多平台的软件构建方法及装置 | |
CN114118944A (zh) | 一种取证实验室分级管理方法、终端设备及存储介质 | |
US8046750B2 (en) | Disco: a simplified distributed computing library | |
CN111581108A (zh) | 基于业务***交易测试的输入数据获取方法及装置 | |
CN111221787A (zh) | 一种文件处理方法及装置 | |
CN112347122B (zh) | Sql工作流处理方法、装置、电子设备和存储介质 | |
CN114462271A (zh) | 有限元模型单元铺层信息修改方法、***、设备及介质 | |
CN116841657A (zh) | 接口函数调用方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |