CN116560629A - 一种数据传输对象的序列化方法、装置、介质和设备 - Google Patents

一种数据传输对象的序列化方法、装置、介质和设备 Download PDF

Info

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
Application number
CN202310610849.XA
Other languages
English (en)
Inventor
白明乾
刘建波
刘宏运
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202310610849.XA priority Critical patent/CN116560629A/zh
Publication of CN116560629A publication Critical patent/CN116560629A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications

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中任一项权利要求所述的方法。
CN202310610849.XA 2023-05-25 2023-05-25 一种数据传输对象的序列化方法、装置、介质和设备 Pending CN116560629A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116932615A (zh) * 2023-09-19 2023-10-24 北京城建智控科技股份有限公司 自适应协议的数据序列化方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
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
US20110106776A1 (en) Incremental implementation of undo/redo support in legacy applications
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
CN110554958A (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) 一种数据库表变更方法、装置、设备和存储介质
CN113326026B (zh) 一种微服务业务流程接口的生成方法与终端
JP2023553220A (ja) マルチインスタンスプロセスのためのプロセスマイニング
WO2021147773A1 (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
CN112039975A (zh) 一种报文字段的处理方法、装置、设备及存储介质
CN116302328A (zh) 智能合约数据处理方法和系统
CN114168119B (zh) 代码文件编辑方法、装置、电子设备以及存储介质
CN109697216B (zh) 清算交易信息处理方法、装置及系统
CN115114297A (zh) 数据轻量存储及查找方法、装置、电子设备及存储介质
CN111880803B (zh) 一种应用于多平台的软件构建方法及装置
CN114756470A (zh) 测试文件生成方法、装置、存储介质及计算机设备
CN114118944A (zh) 一种取证实验室分级管理方法、终端设备及存储介质
US8046750B2 (en) Disco: a simplified distributed computing library
CN111581108A (zh) 基于业务系统交易测试的输入数据获取方法及装置
CN111221787A (zh) 一种文件处理方法及装置
CN108806797A (zh) 一种医疗数据的处理方法及系统
CN116841657A (zh) 接口函数调用方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication