CN116974581B - 代码生成方法、装置、电子设备和存储介质 - Google Patents
代码生成方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN116974581B CN116974581B CN202311236838.6A CN202311236838A CN116974581B CN 116974581 B CN116974581 B CN 116974581B CN 202311236838 A CN202311236838 A CN 202311236838A CN 116974581 B CN116974581 B CN 116974581B
- Authority
- CN
- China
- Prior art keywords
- class
- code
- interface
- implementation
- data
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 306
- 230000006870 function Effects 0.000 claims description 25
- 238000010276 construction Methods 0.000 claims description 20
- 230000003068 static effect Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 6
- 238000001514 detection method Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 48
- 238000012545 processing Methods 0.000 abstract description 9
- 239000000243 solution Substances 0.000 description 9
- 230000004048 modification Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000003139 buffering effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000002689 soil Substances 0.000 description 1
- 238000006467 substitution reaction 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/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种代码生成方法、装置、电子设备和存储介质,涉及数据处理技术领域。其中方法包括:对接口代码进行检测,得到所述接口代码中的多个注解;基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。本发明可以帮助开发者减少很多重复代码的编写工作,从而提高开发效率并降低开发成本,且程序自动编写数据源代码可以提高应用开发的准确性。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种代码生成方法、装置、电子设备和存储介质。
背景技术
随着计算机软件技术的快速发展,应用开发的需求越来越高。网络请求是应用开发必不可少的功能,大多数应用展示的数据都是通过网络请求访问后获取得到的。在MVVM(Model-View-ViewModel,模型-视图-视图模型)的设计思想中,网络请求方式需要软件开发人员衔接页面、逻辑、数据源的处理。其中,MVVM是一种软件架构模式;View层代表视图负责与用户交互,ViewModel层代表业务逻辑层负责业务逻辑控制处理,Model层代表数据源负责向ViewModel层提供数据。
目前,在业务逻辑层与数据源的衔接都是通过硬编码的方式来完成数据传输。然而,在对数据源存在修改需求时,开发人员都需要修改数据源对应的实现代码,而这些代码由开发人员手动编写,不仅费时费力,降低了应用开发效率且提高了开发成本,且手动编写大量代码容易出现许多不可预见的问题,给应用系统带来隐患,即降低应用开发的准确性。
发明内容
本发明提供一种代码生成方法、装置、电子设备和存储介质,用以解决现有技术中开发效率低且开发成本高的缺陷,实现降本增效。
本发明提供一种代码生成方法,包括:
对接口代码进行检测,得到所述接口代码中的多个注解;
基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;
其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。
根据本发明提供的一种代码生成方法,所述基于所述多个注解和所述接口代码,生成数据源代码,包括:
基于所述接口代码中接口的接口名,确定所述数据源代码的类名;
基于所述类名,构建实现类;
基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,得到数据源代码。
根据本发明提供的一种代码生成方法,所述基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,包括:
基于所述接口代码中各方法的方法名、返回类型和方法参数,确定至少一个实现方法;
基于所述多个注解中所述数据请求方式对应的注解、所述多个注解中所述数据请求域名对应的注解和各所述返回类型,分别确定所述至少一个实现方法的返回对象;
基于各所述返回对象,确定所述至少一个实现方法的方法体;
基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体。
根据本发明提供的一种代码生成方法,任一所述实现方法的返回对象是基于如下步骤确定:
基于所述实现方法的返回类型,确定数据获取类中所述返回类型对应的数据获取方法,所述数据获取类为预先封装数据获取逻辑的静态类;
基于所述多个注解中作用于所述实现方法的至少一个注解,确定所述数据获取方法的方法参数;
基于所述数据获取方法和所述数据获取方法的方法参数,确定所述实现方法的返回对象。
根据本发明提供的一种代码生成方法,所述数据获取方法的方法参数包括第一方法参数,所述第一方法参数是基于如下步骤确定:
基于所述至少一个注解中所述数据请求域名对应的注解,确定所述数据请求域名对应的目标类变量;
基于所述目标类变量,确定所述第一方法参数。
根据本发明提供的一种代码生成方法,所述基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体,包括:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的类变量;
基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体。
根据本发明提供的一种代码生成方法,所述基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体,包括:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象;
基于各所述请求对象,分别确定各所述类变量的赋值代码;
基于各所述赋值代码和所述类名,确定所述实现类的构造函数;
基于所述至少一个实现方法、各所述方法体、各所述类变量和所述构造函数,构建所述实现类的类体。
根据本发明提供的一种代码生成方法,所述基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象,包括:
基于所述多个注解中所述数据请求域名对应的注解,分别确定对象获取函数的参数,以确定至少一个域名对应的请求对象;
其中,所述对象获取函数为用于构造所述请求对象的工厂类包括的函数,各所述类变量的变量类型相同。
根据本发明提供的一种代码生成方法,所述基于所述类名,构建实现类,之后还包括:
基于所述接口代码中接口的路径,构建用于连接至所述接口代码的目标链接;
基于所述目标链接,构建所述实现类的类注释。
根据本发明提供的一种代码生成方法,所述对接口代码进行检测,得到所述接口代码中的多个注解,之前还包括:
基于预设的接口注解,从待编译的代码文件中匹配出所述接口注解修饰的目标接口,所述目标接口为需要生成实现类代码的接口;
将所述代码文件中所述目标接口的完整代码确定为所述接口代码。
本发明还提供一种代码生成装置,包括:
检测模块,用于对接口代码进行检测,得到所述接口代码中的多个注解;
生成模块,用于基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;
其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述代码生成方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述代码生成方法。
本发明提供的代码生成方法、装置、电子设备和存储介质,将数据源的相关参数通过注解注入到模板代码得到接口代码,以对接口代码进行检测,得到接口代码中的多个注解,进而基于多个注解和该接口代码,自动生成数据源代码,该数据源代码用于获取数据,从而在数据源存在修改需求时,开发人员只需修改注解,即只需将所需的相关参数通过注解注入到模板代码,后续将会自动生成不同相关参数对应的数据源代码,帮助开发者减少很多重复代码的编写工作,从而提高开发效率并降低开发成本,且程序自动编写数据源代码可以提高应用开发的准确性;同时,相关参数包括数据请求方式和数据请求域名,从而无需手动编写不同数据请求方式对应的代码,简化数据源代码,使得数据源代码美观且容易理解。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的代码生成方法的流程示意图之一;
图2为本发明提供的代码生成方法的流程示意图之二;
图3为本发明提供的代码生成装置的结构示意图;
图4为本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着计算机软件技术的快速发展,应用开发的需求越来越高。网络请求是应用开发必不可少的功能,大多数应用展示的数据都是通过网络请求访问后获取得到的。在MVVM(Model-View-ViewModel,模型-视图-视图模型)的设计思想中,网络请求方式需要软件开发人员衔接页面、逻辑、数据源的处理。其中,MVVM是一种软件架构模式;View层代表视图负责与用户交互,ViewModel层代表业务逻辑层负责业务逻辑控制处理,Model层代表数据源负责向ViewModel层提供数据。
目前,在业务逻辑层与数据源的衔接都是通过硬编码的方式来完成数据传输。然而,在对数据源存在修改需求时,开发人员都需要修改数据源对应的实现代码,而这些代码由开发人员手动编写,不仅费时费力,降低了应用开发效率且提高了开发成本,且手动编写大量代码容易出现许多不可预见的问题,给应用系统带来隐患,即降低应用开发的准确性。
随着市场对应用的要求越来越高,一些数据量大的应用场景需要本地与远程两个数据源,即应用的数据请求方式存在不同。因此,需要手动编写不同数据请求方式对应的代码,而仅仅是数据请求方式不同,其他业务逻辑基本相同的情况下则需要重复编写,使得代码臃肿、不美观、难以理解、拓展性较弱。若仅仅编写一种数据请求方式对应的代码,如远程网络请求,然而,网络覆盖范围大都是在市县级乡镇级别,对于黑龙江、内蒙古、新疆、西藏等地广人稀的区域,网络覆盖不全,尤其是农业部门,需要在田地里收集土壤、农作物等信息,网络不通畅导致无法使用应用录入相关信息,导致业务人员工作效率低、产能低,也成为农户无法使用现代化农业技术的屏障。
针对上述问题,本发明提出以下各实施例。图1为本发明提供的代码生成方法的流程示意图之一,如图1所示,该代码生成方法包括:
步骤110,对接口代码进行检测,得到所述接口代码中的多个注解。
其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。
此处,模板代码可以预先编写得到,即接口代码中的接口可以预先定义得到。该模板代码中接口的接口名可以根据实际需要设定,例如,TestService。进一步地,模板代码中的接口包括至少一个方法,每一个方法代表一个后台接口,方法的返回值代表后台接口返回的数据结果,方法的方法参数代表后台接口入参。因此,开发者只需编写接口代码即可,无需编写数据源代码。
此处,接口代码包括模板代码和多个注解。相关参数为定义数据源的相关参数,即在对数据源存在修改需求时,只需修改相关参数对应的注解即可,无需重新编写数据源代码。
需要说明的是,每一个相关参数对应的注解可以不同,也可以相同,不同的注解类是需要提前定义得到的。该相关参数可以包括但不限于以下至少一种:数据请求方式、数据请求域名、数据缓存时间、数据请求路径等等。数据请求方式表示数据的获取来源,其可以包括但不限于:本地数据库、远程的服务器等等。数据请求域名即数据请求的域名。数据缓存时间即限定数据的缓存时间。数据请求路径即限定数据的获取路径。
在一实施例中,将注解的生命周期定义为只在源码中生效,例如定义为SOURCE。
在一实施例中,注解可以作用于接口上,也可以作用于方法上。例如,每一个接口请求的域名可能不同,所以数据请求域名对应的注解作用域定义在接口或者方法上,用来传递网络域名,如果注解只作用在接口上,默认此接口下所有方法使用接口声明的域名。
例如,数据请求域名对应的注解为“@ApiRepository”,该注解@ApiRepository中存在一个参数代表数据请求域名,如注入到模板代码后得到“@ApiRepository(baseUrl =HttpURL.ZN)”,该“HttpURL.ZN”表示数据请求域名。
在一实施例中,接口代码中接口为需要生成实现类代码的接口,基于此,通过预设的接口注解,修饰需要生成实现类代码的接口。例如,预设的接口注解为“@ApiRepository”。
例如,数据请求方式对应的注解为“@ApiDataBase”。为便于理解,假设该注解@ApiDataBase的值可以包括但不限于以下至少一种:DB_AND_SERVER、DB_EMPTY_FETCH_SERVER、DB_ONLY、SERVER_ONLY等等。DB_AND_SERVER表示先从本地数据库获取数据,再从服务器获取数据;DB_EMPTY_FETCH_SERVER表示先从本地数据库获取,如果本地数据库的数据为空,则从服务器获取数据;DB_ONLY表示仅从本地数据库获取数据;SERVER_ONLY表示仅从服务器获取数据。如注入到模板代码后得到“ @ApiDataBase(ApiDataBase.Strategy.DB_ONLY)”。
例如,数据缓存时间对应的注解为“@time”,该注解@time的值即表示数据缓存时间。
例如,数据请求路径对应的注解为“@GET”或“@POST”,该注解中的值即表示数据请求的路径(path),如注入到模板代码后得到“ @GET("common/dict/dicts?type=serviceMobile&code=01") ”,该“common/dict/dicts?type=serviceMobile&code=01”表示数据请求路径。
在一实施例中,接口代码中各方法需要被数据请求路径对应的注解修饰,以传递数据请求路径。
示例性的,接口代码如下:
@ApiRepository(baseUrl = HttpURL.ZN)
public interface TestService {
@GET("common/dict/dicts?type=serviceMobile&code=01")
LiveData<ApiResponse<String>> queryDictServiceMobile();
@ApiDataBase(ApiDataBase.Strategy.DB_ONLY)
@ApiRepository(baseUrl = HttpURL.OM)
@GET("m/smart/machineryTask/queryCurrencyCrop")
LiveData<ApiResponse<MachineCropType>> listCropType();
}。
在一具体实施例中,在接口代码的编译时期,对接口代码进行检测,得到接口代码中的多个注解。
在一实施例中,通过APT(Annotation Processing Tools,注解处理器)技术,对接口代码进行检测,找出接口代码中的所有注解(Annotatio)。
步骤120,基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据。
在本发明实施例中,接口代码在编码阶段只是说明程序如何根据数据源的相关参数去获取数据,而非真正获取数据的实现代码,因此,需要在代码编译时期,根据接口代码中的多个注解,以及接口代码中的相关信息,自动生成真正获取数据的数据源代码。在一实施例中,基于数据源代码生成新的代码文件。该数据源代码可以直接在代码层里使用。
在一实施例中,通过APT技术,基于多个注解和接口代码,生成接口代码对应的数据源代码(实现类代码)。具体地,通过自定义注解作用在接口和方法上,注解的值(value)分别代表数据源的相关参数,在编译时编译器会检查AbstractProcessor的子类,并且调用该类型的process函数,然后将添加了注解的所有元素都传递到process函数中,使得可以在编译时过滤所有被注解所修饰的类,通过Processor提供的Elements、Types、Filer工具类拿到服务接口中方法的参数信息,最后通过JavaPoet来生成所需的java文件。
在一实施例中,指定数据源代码的包路径,基于数据源代码生成代码文件,并将代码文件写到包路径对应的区域。进一步地,该代码文件的文件名可以基于实现类的类名确定。
可以理解的是,可以在编译时期根据注解动态生成数据源层的数据仓库文件(数据源代码),根据注解参数决定使用本地数据还是远程数据,打通本地数据与远程数据,把逻辑相关的代码在编译时期动态生成,来消除数据仓库模板代码,提升开发效率,缩短开发流程,减少出错空间,提高扩展性。此外,同时根据当前网络质量决定使用本地数据还是网络数据,能够使用户在没用网络的情况下,实现数据录入。
本发明实施例提供的代码生成方法,将数据源的相关参数通过注解注入到模板代码得到接口代码,以对接口代码进行检测,得到接口代码中的多个注解,进而基于多个注解和该接口代码,自动生成数据源代码,该数据源代码用于获取数据,从而在数据源存在修改需求时,开发人员只需修改注解,即只需将所需的相关参数通过注解注入到模板代码,后续将会自动生成不同相关参数对应的数据源代码,帮助开发者减少很多重复代码的编写工作,从而提高开发效率并降低开发成本,且程序自动编写数据源代码可以提高应用开发的准确性;同时,相关参数包括数据请求方式和数据请求域名,从而无需手动编写不同数据请求方式对应的代码,简化数据源代码,使得数据源代码美观且容易理解。
基于上述任一实施例,图2为本发明提供的代码生成方法的流程示意图之二,如图2所示,上述步骤120包括:
步骤121,基于所述接口代码中接口的接口名,确定所述数据源代码的类名。
具体地,可以基于接口名的部分字段或全部字段做进一步处理确定数据源代码的类名,也可以直接将接口名确定为类名。
在一实施例中,将接口名的部分字段与预设字段进行拼接,得到数据源代码的类名。例如,接口名为TestService,预设字段为Repository,则生成的类名为TestRepository,即将接口名的前缀与作为后缀的预设字段进行拼接。
步骤122,基于所述类名,构建实现类。
在一具体实施例中,以Java开发为例,基于类名TestRepository ,构建实现类“public final class TestRepository ”,其中,“public”和“final”的修饰可以根据实际需要设定,这样设定是基于预设的规范确定的。更为具体地,通过类构造器创建实现类。
步骤123,基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,得到数据源代码。
具体地,目前实现类已经生成了,但是此时实现类中没有对应的内容,基于此,通过遍历接口代码中的方法,以基于接口代码中各方法和多个注解,生成接口代码中接口对应的具体实现。该数据源代码即包括实现类及其类体。
本发明实施例提供的代码生成方法,基于接口代码中接口的接口名,确定数据源代码的类名,并基于该类名构建实现类,从而实现接口与其实现类的关联,基于接口代码中各方法和多个注解,构建实现类的类体,得到数据源代码,从而自动生成接口代码中各方法的具体实现,进而无需手动编写具体的实现类,提高开发效率并降低开发成本,且提高开发的准确性。
基于上述任一实施例,该方法中,上述步骤123中,基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,包括步骤1231至步骤1234。
步骤1231,基于所述接口代码中各方法的方法名、返回类型和方法参数,确定至少一个实现方法。
此处,接口代码中任一方法与对应的实现方法在方法名和返回类型上相同。例如,接口代码中的方法为:
LiveData<ApiResponse<String>> queryDictServiceMobile();则对应的实现方法为:
public LiveData<ApiResource<String>> queryDictServiceMobile(finalLiveData<String> dbLiveData)。
此处,若接口代码中任一方法存在方法参数,则对应的实现方法也应该包括该接口代码中方法的方法参数,且该实现方法还可以包括接口代码中方法不存在的方法参数,例如,数据库对象固定不变,则直接将预设的数据库对象确定为实现方法中方法的方法参数,如方法参数为“final LiveData<String> dbLiveData”。
在一实施例中,创建容器接收接口代码中各方法的方法参数,即获得当前方法下参数的迭代器,通过不断循环,把迭代器中的参数存储在容器中;如果存在多个参数,每一个参数用“,”逗号分割开。
进一步地,基于接口代码中各方法的方法名,以及接口代码中接口的接口名,以及多个注解中数据请求方式对应的注解,生成该实现方法的注解。示例性的,注解如下:
/**
* generate method from
* {@link TestService#queryDictServiceMobile()}
*add db strategy by{@link @com.sinochem.argc.http.annotation.ApiDataBase(value=DB_ONLY)}
*/ 。
步骤1232,基于所述多个注解中所述数据请求方式对应的注解、所述多个注解中所述数据请求域名对应的注解和各所述返回类型,分别确定所述至少一个实现方法的返回对象。
此处,返回类型用于确定所需创建的返回对象的类型。
具体地,基于多个注解中数据请求方式对应的注解的值,确定至少一个实现方法的数据请求方式;基于多个注解中数据请求域名对应的注解的值,确定至少一个实现方法的数据请求域名;基于确定的数据请求方式和数据请求域名,确定返回类型对应的返回对象。
步骤1233,基于各所述返回对象,确定所述至少一个实现方法的方法体。
具体地,基于各返回对象,确定各返回代码,以基于各返回代码确定至少一个实现方法的方法体。
例如,其中一个返回对象为liveData,则返回代码为“retern liveData”,则方法体为“{ retern liveData }”。
进一步地,基于多个注解中数据缓存时间对应的注解,确定缓存数据的时间。
步骤1234,基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体。
具体地,该实现类的类体包括各实现方法和各实现方法对应的方法体。
本发明实施例提供的代码生成方法,基于接口代码中各方法的方法名、返回类型和方法参数,确定至少一个实现方法,从而实现接口中各方法与其实现类中各方法的关联,即更好地表示接口中方法的实现方法;基于多个注解中数据请求方式对应的注解、多个注解中数据请求域名对应的注解和各返回类型,分别确定至少一个实现方法的返回对象,从而基于注解和返回类型更为准确地确定各实现方法的返回对象;基于各返回对象,确定至少一个实现方法的方法体,且基于至少一个实现方法和各方法体,构建实现类的类体,从而自动生成接口代码中各方法的具体实现,进而无需手动编写具体的实现方法,提高开发效率并降低开发成本,且提高开发的准确性。
基于上述任一实施例,任一所述实现方法的返回对象是基于如下步骤确定:
基于所述实现方法的返回类型,确定数据获取类中所述返回类型对应的数据获取方法,所述数据获取类为预先封装数据获取逻辑的静态类;
基于所述多个注解中作用于所述实现方法的至少一个注解,确定所述数据获取方法的方法参数;
基于所述数据获取方法和所述数据获取方法的方法参数,确定所述实现方法的返回对象。
此处,数据获取类为预先封装数据获取逻辑的静态类,从而无需编写数据获取逻辑的代码,减少代码生成的工作量,提高代码生成的效率。该数据获取类可能包括多种返回类型对应的数据获取方法,例如,返回类型为LiveData<Resource<String>>,则该返回类型对应的数据获取方法为RequestUtil.getResourceLiveData(),RequestUtil为数据获取类。
此处,至少一个注解包括数据请求域名对应的注解和/或数据请求方式对应的注解,即修饰实现方法的注解并不一定有数据请求域名对应的注解或数据请求方式对应的注解。作用于实现方法的注解不仅包括修饰接口代码中该实现方法对应的方法的注解,还包括修饰接口代码中接口的注解。
具体地,基于多个注解中作用于实现方法的至少一个注解的值,确定数据获取方法的方法参数。更为具体地,基于至少一个注解中数据请求域名对应的注解,确定请求对象;基于至少一个注解中数据请求方式对应的注解,确定数据请求方式;该方法参数包括但不限于:请求对象和数据请求方式等等,例如该方法参数还包括数据库对象。
需要说明的是,有了数据获取方法及其方法参数,就可以确定返回对象了,如RequestUtil.getResourceLiveData(请求对象,数据请求方式)。
本发明实施例提供的代码生成方法,基于实现方法的返回类型,确定数据获取类中返回类型对应的数据获取方法,该数据获取类为预先封装数据获取逻辑的静态类,从而无需编写数据获取逻辑的代码,减少代码生成的工作量,提高代码生成的效率,最终提高开发效率;基于多个注解中作用于实现方法的至少一个注解,确定数据获取方法的方法参数,进而基于数据获取方法和数据获取方法的方法参数,确定实现方法的返回对象,从而获取到预先设定的数据请求域名和数据请求方式对应的返回对象,进而提高返回对象的确定准确性。
基于上述任一实施例,所述数据获取方法的方法参数包括第一方法参数,所述第一方法参数是基于如下步骤确定:
基于所述至少一个注解中所述数据请求域名对应的注解,确定所述数据请求域名对应的目标类变量;
基于所述目标类变量,确定所述第一方法参数。
需要说明的是,不同数据请求域名对应不同的类变量,基于此,基于数据请求域名对应的注解的值,确定该数据请求域名对应的目标类变量。进一步地,为了防止变量名冲突,利用数据请求域名计算出随机四位数,作为变量后缀,如不同的类变量分别为mService2526和mService2868。
在一实施例中,考虑到因每一个方法都可以设置不同的数据请求域名,每一个数据请求域名代表不同的请求对象,基于此,先将域名存放到变量表Map中,其中Map中的键为域名,Map中的值为变量名,代表一个变量名对应一个域名。因此,基于数据请求域名对应的注解,从Map中确定出该数据请求域名对应的目标类变量。
示例性的,目标类变量为mService286,第一方法参数可以为“ () -> mService2868.queryDictServiceMobile()”。
示例性的,实现方法及其方法体如下所示:
public LiveData<Resource<String>> queryDictServiceMobile(
final LiveData<String> dbLiveData) {
return RequestUtil.getResourceLiveData(
() -> mService2868.queryDictServiceMobile(),
dbLiveData,
ApiDataBase.Strategy.DB_ONLY) }。
本发明实施例提供的代码生成方法,基于至少一个注解中数据请求域名对应的注解,确定数据请求域名对应的目标类变量,以基于目标类变量,确定第一方法参数,从而只需确定目标类变量,无需生成数据请求域名对应的请求对象的构建代码,即无需自动编写构建请求对象的代码,减少代码生成的工作量,提高代码生成的效率,最终提高开发效率。
基于上述任一实施例,该方法中,上述步骤1234包括:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的类变量;
基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体。
需要说明的是,不同数据请求域名对应不同的类变量,基于此,基于数据请求域名对应的注解的值,确定该数据请求域名对应的目标类变量。进一步地,为了防止变量名冲突,利用数据请求域名计算出随机四位数,作为变量后缀,如域名HttpURL.OM对应的类变量为mService2526,域名HttpURL.ZN对应的类变量为mService2868。
在一实施例中,考虑到因每一个方法都可以设置不同的数据请求域名,每一个数据请求域名代表不同的请求对象,基于此,先将域名存放到变量表Map中,其中Map中的键为域名,Map中的值为变量名,代表一个变量名对应一个域名。因此,遍历变量表Map得到所有的类变量。
此处,该实现类的类体包括各实现方法、各实现方法对应的方法体和各类变量。各类变量均需要进行修饰。
在一具体实施例中,以Java开发为例,定义类变量的作用域为private,即定义作用域为私有,从而提高数据的安全性,定义类变量的类型为TestRepository,如类变量为mService2526,则该实现类的类体中包括“private TestService mService2526”。
进一步地,各数据请求域名对应的类变量的变量类型相同,即利用多态的特性表示对应的请求对象,从而无需定义不同的变量类型,提高代码生成效率。
进一步地,生成各类变量对应的请求对象获取方法。如根据类变量,生成对应的get方法,以用于对外暴露对应的请求对象的获取方法,从而提高代码的扩展性。该请求对象获取方法的作用域可以为public,其方法体就是“return 请求对象”。
进一步地,基于多个注解中数据请求域名对应的注解,确定各类变量的注释,以供用户查看该注释即可快速得知数据请求域名,进而提高代码可读性。示例性的,数据请求域名为HttpURL.OM,类变量为mService2526,代码如下所示:
/**
* generate by @ApiRepository(baseUrl = HttpURL.OM)
*/
private TestService mService2526。
本发明实施例提供的代码生成方法,基于多个注解中数据请求域名对应的注解,确定至少一个域名对应的类变量,从而使各类变量可以全局使用,减少代码的生成工作量;基于至少一个实现方法、各方法体和各类变量,构建实现类的类体,从而自动生成接口代码中各方法的具体实现,进而无需手动编写具体的实现方法,提高开发效率并降低开发成本,且提高开发的准确性。
基于上述任一实施例,该方法中,所述基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体,包括:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象;
基于各所述请求对象,分别确定各所述类变量的赋值代码;
基于各所述赋值代码和所述类名,确定所述实现类的构造函数;
基于所述至少一个实现方法、各所述方法体、各所述类变量和所述构造函数,构建所述实现类的类体。
具体地,基于多个注解中数据请求域名对应的注解,确定构建至少一个域名对应的请求对象的代码;将各请求对象分别赋值给各类变量,得到各赋值代码;基于各赋值代码确定构造函数的方法体,基于类名确定构造函数的方法名;该类体包括至少一个实现方法、各方法体、各类变量和构造函数。其中,构造函数的作用域为public。
在一实施例中,考虑到因每一个方法都可以设置不同的数据请求域名,每一个数据请求域名代表不同的请求对象,基于此,先将域名存放到变量表Map中,其中Map中的键为域名,Map中的值为变量名,代表一个变量名对应一个域名。因此,遍历变量表Map得到所有的类变量,以为每一个类变量进行赋值操作,进而生成无参构造函数。
本发明实施例提供的代码生成方法,基于多个注解中数据请求域名对应的注解,确定至少一个域名对应的请求对象,基于各请求对象,分别确定各类变量的赋值代码,基于各赋值代码和类名,确定实现类的构造函数,从而在构造函数中初始化请求对象,即在构造函数中创建请求对象,无需在类变量的定义处以及其他类变量的调用处创建请求对象,进而提高代码生成效率;基于至少一个实现方法、各方法体、各类变量和构造函数,构建实现类的类体,从而自动生成接口代码中各方法的具体实现,进而无需手动编写具体的实现类,提高开发效率并降低开发成本,且提高开发的准确性。
基于上述任一实施例,该方法中,所述基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象,包括:
基于所述多个注解中所述数据请求域名对应的注解,分别确定对象获取函数的参数,以确定至少一个域名对应的请求对象。
其中,所述对象获取函数为用于构造所述请求对象的工厂类包括的函数,各所述类变量的变量类型相同。
具体地,将各数据请求域名分别确定为各对象获取函数的参数。更为具体地,基于类变量的类型和各数据请求域名,确定各对象获取函数的参数。
示例性的,数据请求域名为HttpURL.OM,用于构造请求对象的工厂类为ApiCenter,则对应的请求对象为“ApiCenter.getInstance().getService(TestService.class,HttpURL.OM)”。其中,TestService.class是基于类变量的类型确定的。
示例性的,数据请求域名共包括HttpURL.OM和HttpURL.ZN,相应的,实现类的类变量包括mService2526和 mService2868,实现类的类名为TestRepository。进一步地,还可以构建该构造函数的注释。基于此,在Java开发场景中,构造函数如下所示:
/**
* default constructor
*/
public TestRepository() {
mService2526=ApiCenter.getInstance().getService(TestService.class,HttpURL.OM);
mService2868=ApiCenter.getInstance().getService(TestService.class,HttpURL.ZN)}。
本发明实施例提供的代码生成方法,基于多个注解中数据请求域名对应的注解,分别确定对象获取函数的参数,以确定至少一个域名对应的请求对象,且对象获取函数为用于构造请求对象的工厂类包括的函数,从而通过工厂模式,可以根据不同的域名创建不同的请求对象,无需编写请求对象的构建代码,交由工厂类进行构建,从而减少代码生成的工作量,进而提高代码生成效率;且各变量的变量类型相同,即利用多态的特性表示对应的请求对象,与工厂模式相配合,从而无需定义不同的变量类型,提高代码生成效率。
基于上述任一实施例,在上述步骤122之后,该方法还包括:
基于所述接口代码中接口的路径,构建用于连接至所述接口代码的目标链接;
基于所述目标链接,构建所述实现类的类注释。
需要说明的是,在代码层中,接口代码中的接口存在路径,例如为com.sinochem.httpsample.TestService。目标链接用于供用户查看所连接的接口代码,即所连接的接口。进一步地,目标链接用于供用户点击可以跳转到接口代码处,甚至跳转到接口代码中的接口处。
示例性的,路径为com.sinochem.httpsample.TestService,目标链接为@link com.sinochem.httpsample.TestService,该类注释如下所示:
/**
* Do not modify !!!
* auto generate by {@link com.sinochem.httpsample.TestService}
*/ 。
本发明实施例提供的代码生成方法,基于接口代码中接口的路径,构建用于连接至接口代码的目标链接,基于目标链接,构建实现类的类注释,以供用户查看该类注释即可快速得知所连接的接口代码,即快速得知所连接的接口,进而提高代码可读性。
基于上述任一实施例,在上述步骤110之前,该方法还包括:
基于预设的接口注解,从待编译的代码文件中匹配出所述接口注解修饰的目标接口,所述目标接口为需要生成实现类代码的接口;
将所述代码文件中所述目标接口的完整代码确定为所述接口代码。
示例性的,预设的接口注解为@ApiRepository,利用注解管理器循环过滤待编译的代码文件中每一个类,匹配出所有被@ApiRepository所修饰的目标接口。
在一实施例中,在编译时期,基于预设的接口注解,从待编译的代码文件中匹配出接口注解修饰的目标接口。
本发明实施例提供的代码生成方法,基于预设的接口注解,从待编译的代码文件中匹配出接口注解修饰的目标接口,目标接口为需要生成实现类代码的接口,从而基于预设的接口注解,准确判断需要生成实现类代码的接口,即准确判断需要生成数据源代码的接口,进而提高接口代码的确定准确性。
基于上述各实施例,本发明是通过APT技术巧妙地把数据处理、数据同步、数据策略、数据合并等业务逻辑利用注解变成可选的配置项,把复杂的数据操作数据源层的代码封装成模板代码,通过APT技术自动生成繁琐的数据源代码。在整个网络请求链路中,开发者只需关注网络接口定义,编译之后即可直接使用,对于整体业务开发来说,开发者只需关注视图层、逻辑处理层,通过注解通知数据源层数据获取的方式,无需关注数据源层,使整体流程清晰易懂,同时大大提升了开发速度,并减少由人为出错对系统产生影响。换言之,本发明利用编译时间换开发时间,开发者不在关注数据来源,只需要关注网络接口定义,编译时会自动根据定义的接口信息,来生成对应的数据实现。
下面对本发明提供的代码生成装置进行描述,下文描述的代码生成装置与上文描述的代码生成方法可相互对应参照。
图3为本发明提供的代码生成装置的结构示意图,如图3所示,该代码生成装置,包括:
检测模块310,用于对接口代码进行检测,得到所述接口代码中的多个注解;
生成模块320,用于基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;
其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。
本发明实施例提供的代码生成装置,将数据源的相关参数通过注解注入到模板代码得到接口代码,以对接口代码进行检测,得到接口代码中的多个注解,进而基于多个注解和该接口代码,自动生成数据源代码,该数据源代码用于获取数据,从而在数据源存在修改需求时,开发人员只需修改注解,即只需将所需的相关参数通过注解注入到模板代码,后续将会自动生成不同相关参数对应的数据源代码,帮助开发者减少很多重复代码的编写工作,从而提高开发效率并降低开发成本,且程序自动编写数据源代码可以提高应用开发的准确性;同时,相关参数包括数据请求方式和数据请求域名,从而无需手动编写不同数据请求方式对应的代码,简化数据源代码,使得数据源代码美观且容易理解。
基于上述任一实施例,该生成模块320包括:
类名确定单元,用于基于所述接口代码中接口的接口名,确定所述数据源代码的类名;
类构建单元,用于基于所述类名,构建实现类;
类体构建单元,用于基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,得到数据源代码。
基于上述任一实施例,该类体构建单元还用于:
基于所述接口代码中各方法的方法名、返回类型和方法参数,确定至少一个实现方法;
基于所述多个注解中所述数据请求方式对应的注解、所述多个注解中所述数据请求域名对应的注解和各所述返回类型,分别确定所述至少一个实现方法的返回对象;
基于各所述返回对象,确定所述至少一个实现方法的方法体;
基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体。
基于上述任一实施例,该类体构建单元还用于:
基于所述实现方法的返回类型,确定数据获取类中所述返回类型对应的数据获取方法,所述数据获取类为预先封装数据获取逻辑的静态类;
基于所述多个注解中作用于所述实现方法的至少一个注解,确定所述数据获取方法的方法参数;
基于所述数据获取方法和所述数据获取方法的方法参数,确定所述实现方法的返回对象。
基于上述任一实施例,所述数据获取方法的方法参数包括第一方法参数,该类体构建单元还用于:
基于所述至少一个注解中所述数据请求域名对应的注解,确定所述数据请求域名对应的目标类变量;
基于所述目标类变量,确定所述第一方法参数。
基于上述任一实施例,该类体构建单元还用于:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的类变量;
基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体。
基于上述任一实施例,该类体构建单元还用于:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象;
基于各所述请求对象,分别确定各所述类变量的赋值代码;
基于各所述赋值代码和所述类名,确定所述实现类的构造函数;
基于所述至少一个实现方法、各所述方法体、各所述类变量和所述构造函数,构建所述实现类的类体。
基于上述任一实施例,该类体构建单元还用于:
基于所述多个注解中所述数据请求域名对应的注解,分别确定对象获取函数的参数,以确定至少一个域名对应的请求对象;
其中,所述对象获取函数为用于构造所述请求对象的工厂类包括的函数,各所述类变量的变量类型相同。
基于上述任一实施例,该生成模块320还包括:
链接构建单元,用于基于所述接口代码中接口的路径,构建用于连接至所述接口代码的目标链接;
注释构建单元,用于基于所述目标链接,构建所述实现类的类注释。
基于上述任一实施例,该装置还包括:
接口匹配模块,用于基于预设的接口注解,从待编译的代码文件中匹配出所述接口注解修饰的目标接口,所述目标接口为需要生成实现类代码的接口;
代码确定模块,用于将所述代码文件中所述目标接口的完整代码确定为所述接口代码。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行代码生成方法,该方法包括:对接口代码进行检测,得到所述接口代码中的多个注解;基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的代码生成方法,该方法包括:对接口代码进行检测,得到所述接口代码中的多个注解;基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种代码生成方法,其特征在于,包括:
对接口代码进行检测,得到所述接口代码中的多个注解;
基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;
其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名;
所述基于所述多个注解和所述接口代码,生成数据源代码,包括:
基于所述接口代码中接口的接口名,确定所述数据源代码的类名;
基于所述类名,构建实现类;
基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,得到数据源代码;
所述基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,包括:
基于所述接口代码中各方法的方法名、返回类型和方法参数,确定至少一个实现方法;
基于所述多个注解中所述数据请求方式对应的注解、所述多个注解中所述数据请求域名对应的注解和各所述返回类型,分别确定所述至少一个实现方法的返回对象;
基于各所述返回对象,确定所述至少一个实现方法的方法体;
基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体;
任一所述实现方法的返回对象是基于如下步骤确定:
基于所述实现方法的返回类型,确定数据获取类中所述返回类型对应的数据获取方法,所述数据获取类为预先封装数据获取逻辑的静态类;
基于所述多个注解中作用于所述实现方法的至少一个注解,确定所述数据获取方法的方法参数;
基于所述数据获取方法和所述数据获取方法的方法参数,确定所述实现方法的返回对象。
2.根据权利要求1所述的代码生成方法,其特征在于,所述数据获取方法的方法参数包括第一方法参数,所述第一方法参数是基于如下步骤确定:
基于所述至少一个注解中所述数据请求域名对应的注解,确定所述数据请求域名对应的目标类变量;
基于所述目标类变量,确定所述第一方法参数。
3.根据权利要求1所述的代码生成方法,其特征在于,所述基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体,包括:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的类变量;
基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体。
4.根据权利要求3所述的代码生成方法,其特征在于,所述基于所述至少一个实现方法、各所述方法体和各所述类变量,构建所述实现类的类体,包括:
基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象;
基于各所述请求对象,分别确定各所述类变量的赋值代码;
基于各所述赋值代码和所述类名,确定所述实现类的构造函数;
基于所述至少一个实现方法、各所述方法体、各所述类变量和所述构造函数,构建所述实现类的类体。
5.根据权利要求4所述的代码生成方法,其特征在于,所述基于所述多个注解中所述数据请求域名对应的注解,确定至少一个域名对应的请求对象,包括:
基于所述多个注解中所述数据请求域名对应的注解,分别确定对象获取函数的参数,以确定至少一个域名对应的请求对象;
其中,所述对象获取函数为用于构造所述请求对象的工厂类包括的函数,各所述类变量的变量类型相同。
6.根据权利要求1所述的代码生成方法,其特征在于,所述基于所述类名,构建实现类,之后还包括:
基于所述接口代码中接口的路径,构建用于连接至所述接口代码的目标链接;
基于所述目标链接,构建所述实现类的类注释。
7.根据权利要求1所述的代码生成方法,其特征在于,所述对接口代码进行检测,得到所述接口代码中的多个注解,之前还包括:
基于预设的接口注解,从待编译的代码文件中匹配出所述接口注解修饰的目标接口,所述目标接口为需要生成实现类代码的接口;
将所述代码文件中所述目标接口的完整代码确定为所述接口代码。
8.一种代码生成装置,其特征在于,包括:
检测模块,用于对接口代码进行检测,得到所述接口代码中的多个注解;
生成模块,用于基于所述多个注解和所述接口代码,生成数据源代码,所述数据源代码用于获取数据;
其中,所述接口代码是将数据源的相关参数通过注解注入到模板代码得到的,所述相关参数包括数据请求方式和数据请求域名;
所述生成模块包括:
类名确定单元,用于基于所述接口代码中接口的接口名,确定所述数据源代码的类名;
类构建单元,用于基于所述类名,构建实现类;
类体构建单元,用于基于所述接口代码中各方法和所述多个注解,构建所述实现类的类体,得到数据源代码;
所述类体构建单元还用于:
基于所述接口代码中各方法的方法名、返回类型和方法参数,确定至少一个实现方法;
基于所述多个注解中所述数据请求方式对应的注解、所述多个注解中所述数据请求域名对应的注解和各所述返回类型,分别确定所述至少一个实现方法的返回对象;
基于各所述返回对象,确定所述至少一个实现方法的方法体;
基于所述至少一个实现方法和各所述方法体,构建所述实现类的类体;
所述类体构建单元还用于:
基于所述实现方法的返回类型,确定数据获取类中所述返回类型对应的数据获取方法,所述数据获取类为预先封装数据获取逻辑的静态类;
基于所述多个注解中作用于所述实现方法的至少一个注解,确定所述数据获取方法的方法参数;
基于所述数据获取方法和所述数据获取方法的方法参数,确定所述实现方法的返回对象。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述代码生成方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述代码生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311236838.6A CN116974581B (zh) | 2023-09-25 | 2023-09-25 | 代码生成方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311236838.6A CN116974581B (zh) | 2023-09-25 | 2023-09-25 | 代码生成方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116974581A CN116974581A (zh) | 2023-10-31 |
CN116974581B true CN116974581B (zh) | 2024-01-23 |
Family
ID=88483570
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311236838.6A Active CN116974581B (zh) | 2023-09-25 | 2023-09-25 | 代码生成方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116974581B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117492823B (zh) * | 2023-12-29 | 2024-04-05 | 珠海格力电器股份有限公司 | 代码获取方法、装置、电子设备及可读存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598573A (zh) * | 2016-11-11 | 2017-04-26 | 武汉斗鱼网络科技有限公司 | 一种简化应用程序语言的方法和装置 |
CN106648587A (zh) * | 2016-09-28 | 2017-05-10 | 福州宇嘉软件科技有限公司 | 一种基于注解的Web应用代码生成方法 |
CN110502224A (zh) * | 2019-08-22 | 2019-11-26 | 深圳前海环融联易信息科技服务有限公司 | 基于http请求的接口模拟方法、装置和计算机设备 |
CN111338637A (zh) * | 2020-02-26 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 一种代码生成方法及装置 |
WO2020173128A1 (zh) * | 2019-02-27 | 2020-09-03 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
WO2022002030A1 (zh) * | 2020-06-29 | 2022-01-06 | 北京沃东天骏信息技术有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
CN113961196A (zh) * | 2021-11-15 | 2022-01-21 | 广州品唯软件有限公司 | 一种自动生成代码方法、装置、设备及可读存储介质 |
CN114510262A (zh) * | 2022-02-16 | 2022-05-17 | 中银金融科技有限公司 | 一种接口请求参数校验方法和装置 |
-
2023
- 2023-09-25 CN CN202311236838.6A patent/CN116974581B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648587A (zh) * | 2016-09-28 | 2017-05-10 | 福州宇嘉软件科技有限公司 | 一种基于注解的Web应用代码生成方法 |
CN106598573A (zh) * | 2016-11-11 | 2017-04-26 | 武汉斗鱼网络科技有限公司 | 一种简化应用程序语言的方法和装置 |
WO2020173128A1 (zh) * | 2019-02-27 | 2020-09-03 | 平安科技(深圳)有限公司 | 软件开发工具包的生成方法、装置及终端设备 |
CN110502224A (zh) * | 2019-08-22 | 2019-11-26 | 深圳前海环融联易信息科技服务有限公司 | 基于http请求的接口模拟方法、装置和计算机设备 |
CN111338637A (zh) * | 2020-02-26 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 一种代码生成方法及装置 |
WO2022002030A1 (zh) * | 2020-06-29 | 2022-01-06 | 北京沃东天骏信息技术有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
CN113961196A (zh) * | 2021-11-15 | 2022-01-21 | 广州品唯软件有限公司 | 一种自动生成代码方法、装置、设备及可读存储介质 |
CN114510262A (zh) * | 2022-02-16 | 2022-05-17 | 中银金融科技有限公司 | 一种接口请求参数校验方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116974581A (zh) | 2023-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230057335A1 (en) | Deployment of self-contained decision logic | |
US8396827B2 (en) | Relation-based hierarchy evaluation of recursive nodes | |
US8813027B2 (en) | Static type checking against external data sources | |
US9165087B2 (en) | Validity path node pattern for structure evaluation of time-dependent acyclic graphs | |
CN110249307A (zh) | 用于在区块链上执行原生合约的系统和方法 | |
US20190243665A1 (en) | Application runtime configuration using design time artifacts | |
US20080162616A1 (en) | Skip relation pattern for graph structures | |
US8418134B2 (en) | Method for efficiently managing property types and constraints in a prototype based dynamic programming language | |
Demuth et al. | Co-evolution of metamodels and models through consistent change propagation | |
US8949790B2 (en) | Debugging visual and embedded programs | |
Arthur et al. | Spring Framework for rapid open source J2EE Web Application Development: A case study | |
US20080162563A1 (en) | Generic graph services utilizing anonymous and identified graph pattern | |
CN103164249A (zh) | 用于脚本语言编译器的扩展机制 | |
US20080162777A1 (en) | Graph abstraction pattern for generic graph evaluation | |
Fill | SeMFIS: a flexible engineering platform for semantic annotations of conceptual models | |
CN116974581B (zh) | 代码生成方法、装置、电子设备和存储介质 | |
US20210103514A1 (en) | Reusable test cases for identifiable patterns | |
CN101819551B (zh) | 记录企业信息系统的服务交互数据的方法和系统 | |
CN112148278A (zh) | 可视化的区块链智能合约框架及智能合约开发部署方法 | |
US8856728B2 (en) | Composition studio to develop and maintain surveillance and compliance scenarios | |
CN111159301A (zh) | 一种基于智能合约的数据创建方法、装置、设备及存储介质 | |
AU2017276243B2 (en) | System And Method For Generating Service Operation Implementation | |
Tauscher et al. | A modular graph transformation rule set for IFC‐to‐CityGML conversion | |
US20200301683A1 (en) | Compiler for context-dependent code global data types | |
US8930960B2 (en) | Methods and systems for object interpretation within a shared object space |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |