本申请涉及软件代码,尤其涉及一种代码生成方法、装置、电子设备及计算机可读存储介质。
背景技术:
1、随着领域驱动设计(domain-driven-design,ddd)的设计思想的流行以及微服务架构和技术中台的兴起,越来越多的企业投入到ddd模型设计的热潮中。其中,在ddd模型的落地过程中,如何将通过ddd技术设计的模型高效地转换成工程代码,从而减少重复编码量,这是一个重要的需求。
2、目前虽然存在一些代码生成工具能基于代码模板将设计好的模型转换成对应的代码。但这种代码生成方案仅支持将新增的模型转换成代码文件,不能支持模型和代码的持续迭代更新,而且由于代码模板的代码结构是固定的,生成的代码文件结构过于单一,难以满足企业和团队的差异化需求。
技术实现思路
1、本申请的主要目的在于提供一种代码生成方法、装置、电子设备及可读存储介质,旨在解决现有的代码生成方案所生成的代码文件结构单一的技术问题。
2、为实现上述目的,本申请提供一种代码生成方法,所述代码生成方法包括:
3、获取结构配置参数,解析所述结构配置参数,得到文件输出位置;
4、获取设计模型数据,将所述设计模型数据转换成模型元数据;
5、获取初始语法树,基于所述模型元数据对所述初始语法树进行更新,得到目标语法树,其中,所述初始语法树为历史代码文件或预设代码模板对应的语法树;
6、根据所述目标语法树生成目标代码文件,并将所述目标代码文件存储至所述文件输出位置。
7、可选地,所述获取初始语法树的步骤,包括:
8、判断是否存在与所述模型元数据的名称和目录均相同的历史代码文件;
9、若存在,则根据所述历史代码文件构建初始语法树;
10、若不存在,则根据预设代码模板构建初始语法树。
11、可选地,所述基于所述模型元数据对所述初始语法树进行更新的步骤包括:
12、判断所述模型元数据的属性名称与所述初始语法树中的属性名称是否相同;
13、若不同,则以所述模型元数据为基准更新所述初始语法树;
14、若相同,则判定所述模型元数据与所述初始语法树存在冲突,并根据预设的冲突处理逻辑处理所述初始语法树。
15、可选地,所述基于所述模型元数据对所述初始语法树进行更新的步骤包括:
16、判断所述模型元数据的方法签名与所述初始语法树中的方法签名是否相同;
17、若不同,则以所述模型元数据为基准更新所述初始语法树;
18、若相同,则判定所述模型元数据与所述初始语法树存在冲突,并根据预设的冲突处理逻辑处理所述初始语法树。
19、可选地,所述根据预设的冲突处理逻辑处理所述初始语法树的步骤包括:
20、若所述冲突处理逻辑为覆盖,则以所述模型元数据为基准更新所述初始语法树;
21、若所述冲突处理逻辑为跳过,则不更新所述初始语法树。
22、可选地,所述结构配置参数还包括代码结构参数,在所述将所述设计模型数据转换成模型元数据的步骤之后,所述方法还包括:
23、根据所述代码结构参数配置所述模型元数据对应的代码结构;
24、所述根据所述目标语法树生成目标代码文件的步骤,包括:
25、遍历所述目标语法树,将所述目标语法树转换成符合所述代码结构的目标代码文件,其中,所述代码结构至少包括类、接口或方法中的一种。
26、可选地,所述代码生成方法还包括:
27、获取自定义扫描路径,通过所述自定义扫描路径遍历工程文件,获得更新代码文件;
28、将所述更新代码文件转换成抽象语法树;
29、根据所述抽象语法树生成对应的模型元数据,其中,所述模型元数据至少包括类名,类注解,类继承信息,类成员变量以及类方法信息中的一种;
30、比对所述模型元数据和待更新设计模型,得到对比结果;
31、基于所述对比结果更新所述待更新设计模型,得到目标设计模型。
32、本申请还提供一种代码生成装置,所述代码生成装置应用于代码生成设备,所述代码生成装置包括:
33、结构配置模块,用于获取结构配置参数,解析所述结构配置参数,得到文件输出位置;
34、模型转换模块,用于获取设计模型数据,将所述设计模型数据转换成模型元数据;
35、语法树更新模块,用于获取初始语法树,基于所述模型元数据对所述初始语法树进行更新,得到目标语法树,其中,所述初始语法树为历史代码文件或预设代码模板对应的语法树;
36、文件生成模块,用于根据所述目标语法树生成目标代码文件,并将所述目标代码文件存储至所述文件输出位置。
37、本申请还提供一种电子设备,所述电子设备为实体设备,所述电子设备包括:存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的所述代码生成方法的程序,所述代码生成方法的程序被处理器执行时可实现如上述的代码生成方法的步骤。
38、本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有实现代码生成方法的程序,所述代码生成方法的程序被处理器执行时实现如上述的代码生成方法的步骤。
39、本申请还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述的代码生成方法的步骤。
40、本申请提供了一种代码生成方法、装置、电子设备及计算机可读存储介质,所述代码生成方法首先获取结构配置参数,解析所述结构配置参数,得到文件输出位置;获取设计模型数据,将所述设计模型数据转换成模型元数据;获取初始语法树,基于所述模型元数据对所述初始语法树进行更新,得到目标语法树,其中,所述初始语法树为历史代码文件或预设代码模板对应的语法树;根据所述目标语法树生成目标代码文件,并将所述目标代码文件存储至所述文件输出位置,本申请的技术方案中通过结构配置参数来确定目标代码结构的存储位置,使得根据设计模型数据生成的目标代码文件的代码结构能根据用户自定义的结构配置参数进行配置,满足不同团队差异化的工程结构规范要求。
41、此外,本申请的技术方案通过设计模型数据来生成对应的目标代码文件,从而在开发过程中进行模型修改时,能够及时将最新修改内容转换为相应的代码文件,保证了代码文件与设计模型的一致性,支持模型和代码的持续迭代更新。
1.一种代码生成方法,其特征在于,所述代码生成方法包括:
2.如权利要求1所述代码生成方法,其特征在于,所述获取初始语法树的步骤,包括:
3.如权利要求1所述代码生成方法,其特征在于,所述基于所述模型元数据对所述初始语法树进行更新的步骤包括:
4.如权利要求1所述代码生成方法,其特征在于,所述基于所述模型元数据对所述初始语法树进行更新的步骤包括:
5.如权利要求3或4所述的代码生成方法,其特征在于,所述根据预设的冲突处理逻辑处理所述初始语法树的步骤包括:
6.如权利要求1所述代码生成方法,其特征在于,所述结构配置参数还包括代码结构参数,在所述将所述设计模型数据转换成模型元数据的步骤之后,所述方法还包括:
7.如权利要求1所述代码生成方法,其特征在于,所述代码生成方法还包括:
8.一种代码生成装置,所述代码生成装置包括:
9.一种电子设备,其特征在于,所述电子设备包括:
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有实现代码生成方法的程序,所述实现代码生成方法的程序被处理器执行以实现如权利要求1至7中任一项所述代码生成方法的步骤。