CN115756424A - 一种生成mvp代码的方法、装置及设备 - Google Patents
一种生成mvp代码的方法、装置及设备 Download PDFInfo
- Publication number
- CN115756424A CN115756424A CN202211539603.XA CN202211539603A CN115756424A CN 115756424 A CN115756424 A CN 115756424A CN 202211539603 A CN202211539603 A CN 202211539603A CN 115756424 A CN115756424 A CN 115756424A
- Authority
- CN
- China
- Prior art keywords
- mvp
- class
- code
- generating
- java
- 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
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及计算机技术领域,具体涉及一种生成MVP代码的方法、装置及设备,该方法包括:获取并集成构建工具插件;利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。可以理解的是,本发明提供的技术方案,能够自动获取添加MVP注解的Java类,并生成MVP代码,用户仅需集成构建工具插件以及添加MVP注解,用户无需人工架构MVP代码,大大提高了代码开发的工作效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种生成MVP代码的方法、装置及设备。
背景技术
在目前的Android开发过程中,为了保证在项目开发过程中的可维护性,常常需要对业务解耦,而为了更方便的将一个几千上万行的代码拆分出各种小类、小文件,通常工作人员需要使用一些代码架构方案,例如MVP、mvvm等。
但是,目前使用代码架构方案对代码进行拆分的方法,往往人工进行构建,需要创建大量的类和基础变量,这无疑增大了工作人员的工作量,影响代码开发工作效率。
发明内容
有鉴于此,本发明的目的在于提供一种生成MVP代码的方法、装置及设备,以解决现有技术中需要创建大量的类和基础变量,增大了工作人员的工作量,影响代码开发工作效率的问题。
根据本发明实施例的第一方面,提供一种生成MVP代码的方法,包括:
获取并集成构建工具插件;
利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;
当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。
优选的,所述集成构建工具插件,包括:
创建继承原Plugin类的新的类,实现所述构建工具插件加载入口。
优选的,所述利用所述构建工具插件获取Java类,包括:
从所述Android项目的类扩展中获取原集合;
遍历所述原集合中的类文件,使用预设插件解析Java字节码;
根据所述Java字节码,得到加了所述MVP注解的Java类。
优选的,所述利用所述构建工具插件及所述Java类生成MVP代码,包括:
利用所述构建工具插件,根据所述Java类,利用预设模板生成persenter接口及model接口;
根据所述persenter接口生成对应的实现类,根据所述model接口生成对应的实现类。
优选的,在所述从所述Android项目的类扩展中获取原集合之前,还包括:
若当前操作目录是Android主项目,则获取唯一身份标识用于做后续代码生成包名前戳。
优选的,在所述利用所述构建工具插件获取Java类之后,还包括:
若获取的Java类的数量为零,则不进行后续处理,用以保证与老旧代码的兼容。
根据本发明实施例的第二方面,提供一种生成MVP代码的装置,包括:
插件模块,用于获取并集成构建工具插件;
类获取模块,用于利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;
生成模块,用于当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。
根据本发明实施例的第三方面,提供一种生成MVP代码的设备,包括:
主控器,及与所述主控器相连的存储器;
所述存储器,其中存储有程序指令;
所述主控器用于执行存储器中存储的程序指令,执行上述任一项所述的方法。
本发明的实施例提供的技术方案可以包括以下有益效果:
可以理解的是,本发明提供的技术方案,通过获取并集成构建工具插件;利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。可以理解的是,本发明提供的技术方案,能够自动获取添加MVP注解的Java类,并生成MVP代码,用户仅需集成构建工具插件以及添加MVP注解,用户无需人工架构MVP代码,大大提高了代码开发的工作效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的MVP示意图;
图2是根据一示例性实施例示出的未使用MVP的代码结构图;
图3是根据一示例性实施例示出的使用MVP的代码结构图;
图4是根据一示例性实施例示出的一种生成MVP代码的方法的步骤示意图;
图5是根据一示例性实施例示出的一种gradle插件生命周期示意图;
图6是根据一示例性实施例示出的一种生成MVP代码的装置的示意框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
由于目前Android开发大多数都使用Android studio开发工具,它的开发构建以及依赖包管理都基于Gradle(构建工具插件),Gradle是一个基于Apache Ant和ApacheMaven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven、Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy、build脚本使用Groovy编写。
Groovy基本特点如下:
1、构建在强大的Java语言之上,并添加了从Python、Ruby和Smalltalk等语言中学到的诸多特征,例如动态类型转换、闭包和元编程(metaprogramming)支持。
2、为Java开发者提供了现代最流行的编程语言特性,而且学习成本很低(几乎为零)。
3、支持DSL(Domain Specific Languages领域特定语言)和其它简洁的语法,让代码变得易于阅读和维护。
4、受检查类型异常(Checked Exception)也可以不用捕获。
5、Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建ShellScripts变得非常简单。
6、在开发Web、GUI、数据库或控制台程序时通过减少框架性代码大大提高了开发者的效率。
7、支持单元测试和模拟(对象),可以简化测试。
8、无缝集成所有已经存在的Java对象和类库。
9、直接编译成Java字节码,这样可以在任何使用Java的地方使用Groovy。
10、支持函数式编程,不需要main函数。
11、一些新的运算符。
12、默认导入常用的包。
13、断言不支持jvm的-ea参数进行开关。
14、支持对对象进行布尔求值。
15、类不支持default作用域,且默认作用域为public。
16、groovy中基本类型也是对象,可以直接调用对象的方法。
如下为关于MVP的解释:
MVP为模型、视图和演示者(Model、View和Presenter),如图1所示,图1是根据一示例性实施例示出的MVP示意图,Model View Presenter将应用程序分为三层,即Model、View和Presenter。
Android中MVP准则如下:Activity、Fragment和CustomView充当应用程序的View部分。演示者负责侦听用户交互(在View上)和模型更新(数据库、API),以及更新Model和View。通常,视图和演示者之间是一对一的关系,一个Presenter类一次管理一个View。需要定义和实现接口,以在View-Presenter和Presenter-Model之间进行通信。演示者负责处理所有后台任务。在presenter类中必须避免使用Android SDK类。View和Model类不能互相引用。
在未使用MVP之前,我们开发的代码结构如图2所示,在使用了MVP之后,代码结构如图3所示,虽然结构上MVP看起来清晰了,但另外一个问题是开发成本的提高,使用MVP后,创建一个新的界面往往需要建更多的类。本发明核心是一键自动化生成MVP代码,节约因使用MVP架构带来的开发成本问题。
实施例一
图4是根据一示例性实施例示出的一种生成MVP代码的方法的步骤示意图;提供一种生成MVP代码的方法,包括:
步骤S11、获取并集成构建工具插件;
步骤S12、利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;
步骤S13、当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。
在具体实践中,本实施例使用了Java注解(Annotation)又称Java标注,是JDK5.0引入的一种注释机制。Java语言中的类、方法、变量、参数和包等都可以被标注。和Javadoc不同,Java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java虚拟机可以保留标注内容,在运行时可以获取到标注内容。当然它也支持自定义Java标注。
在实际应用场景中,本发明使用groovy语言开发一款gradle插件(构建工具插件)用户使用较为简单,具体步骤如下:集成gradle插件;在Android项目中的activity(应用组件)加上@MVP注解;点击gradle任务,生成MVP相关代码。
可以理解的是,本实施例提供的技术方案,通过获取并集成构建工具插件;利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。可以理解的是,本实施例提供的技术方案,能够自动获取添加MVP注解的Java类,并生成MVP代码,用户仅需集成构建工具插件以及添加MVP注解,用户无需人工架构MVP代码,大大提高了代码开发的工作效率。
选用gradle插件来实现该功能,对于gradle插件,我们需要先了解它的生命周期,图5是根据一示例性实施例示出的一种gradle插件生命周期示意图,Gradle生命周期分为三个部分,如下:初始化阶段:解析整个工程中所有Project,构建所有的Project对应的project对象,这个阶段主要就是解析setting.gradle文件;配置阶段:解析所有的projects对象中的task,构建好所有的task拓扑图,主要解析各个project下的build.gradle文件;执行阶段:执行具体的的task及其依赖task。
需要说明的是,所述集成构建工具插件,包括:
创建继承原Plugin类的新的类,实现所述构建工具插件加载入口。
在具体实践中,首先创建一个gralde插件,创建类名为MVPPlugin的类,继承plgin实现插件加载入口。
需要说明的是,所述利用所述构建工具插件获取Java类,包括:
从所述Android项目的类扩展中获取原集合;
遍历所述原集合中的类文件,使用预设插件解析Java字节码;
根据所述Java字节码,得到加了所述MVP注解的Java类。
在具体实践中,创建一个task(任务),并从extension(类扩展)中获取sourceSets(原集合)用来获取项目中业务源码;扫描当前项目中所有的Java类;从第获取的souceSets中遍历并类文件使用JavaParser插件解析Java字节码;找到目标类,也就是我们加了MVP注解的Java类。
需要说明的是,所述利用所述构建工具插件及所述Java类生成MVP代码,包括:
利用所述构建工具插件,根据所述Java类,利用预设模板生成persenter接口及model接口;
根据所述persenter接口生成对应的实现类,根据所述model接口生成对应的实现类。
在具体实践中,根据模板生成presenter类:代码模板是内置的,可以提前预制一份标准的通用模板,此处模板对外提供接口可自定义。
标准的presenter模板核心参数为persenter类名,Java文件名,构造函数名称,Contarct注解,还有对应的view类,contract类,presenter类的导入。
优选的,对于基础lib库,使用proxy模式,将view及presenter接口对实现类进行关联;使用Java动态代理技术,可将view,presenter接口进行关联,从而减少代码耦合。
需要说明的是,在所述从所述Android项目的类扩展中获取原集合之前,还包括:
若当前操作目录是Android主项目,则获取唯一身份标识用于做后续代码生成包名前戳。
在具体实践中,可以首先判断是Android主项目,还是library项目,主要目的是用来区分是当前操作目录是Android主项目还是library项目,针对Android主项目,可以获取applicationId用于做后续代码生成包名前戳,相当于是基础路径。
需要说明的是,在所述利用所述构建工具插件获取Java类之后,还包括:
若获取的Java类的数量为零,则不进行后续处理,用以保证与老旧代码的兼容。
在具体实践中,如果用户没有添加MVP代码,则不需要处理,这也是保证项目中存在有老旧代码而做的一个兼容处理。
实施例二
图6是根据一示例性实施例示出的一种生成MVP代码的装置的示意框图,提供一种生成MVP代码的装置,包括:
插件模块101,用于获取并集成构建工具插件;
类获取模块102,用于利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;
生成模块103,用于当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。
可以理解的是,本实施例提供的技术方案,通过获取并集成构建工具插件;利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。可以理解的是,本实施例提供的技术方案,能够自动获取添加MVP注解的Java类,并生成MVP代码,用户仅需集成构建工具插件以及添加MVP注解,用户无需人工架构MVP代码,大大提高了代码开发的工作效率。
实施例三
提供一种生成MVP代码的设备,包括:
主控器,及与所述主控器相连的存储器;
所述存储器,其中存储有程序指令;
所述主控器用于执行存储器中存储的程序指令,执行上述任一项所述的方法。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (8)
1.一种生成MVP代码的方法,其特征在于,包括:
获取并集成构建工具插件;
利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;
当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。
2.根据权利要求1所述的方法,其特征在于,所述集成构建工具插件,包括:
创建继承原Plugin类的新的类,实现所述构建工具插件加载入口。
3.根据权利要求2所述的方法,其特征在于,所述利用所述构建工具插件获取Java类,包括:
从所述Android项目的类扩展中获取原集合;
遍历所述原集合中的类文件,使用预设插件解析Java字节码;
根据所述Java字节码,得到加了所述MVP注解的Java类。
4.根据权利要求3所述的方法,其特征在于,所述利用所述构建工具插件及所述Java类生成MVP代码,包括:
利用所述构建工具插件,根据所述Java类,利用预设模板生成persenter接口及model接口;
根据所述persenter接口生成对应的实现类,根据所述model接口生成对应的实现类。
5.根据权利要求3所述的方法,其特征在于,在所述从所述Android项目的类扩展中获取原集合之前,还包括:
若当前操作目录是Android主项目,则获取唯一身份标识用于做后续代码生成包名前戳。
6.根据权利要求1所述的方法,其特征在于,在所述利用所述构建工具插件获取Java类之后,还包括:
若获取的Java类的数量为零,则不进行后续处理,用以保证与老旧代码的兼容。
7.一种生成MVP代码的装置,其特征在于,包括:
插件模块,用于获取并集成构建工具插件;
类获取模块,用于利用所述构建工具插件获取Java类,所述Java类为用户在Android项目中应用组件上添加的MVP注解所对应的;
生成模块,用于当接收到用户点击指令时,利用所述构建工具插件及所述Java类生成MVP代码。
8.一种生成MVP代码的设备,其特征在于,包括:
主控器,及与所述主控器相连的存储器;
所述存储器,其中存储有程序指令;
所述主控器用于执行存储器中存储的程序指令,执行如权利要求1~6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211539603.XA CN115756424A (zh) | 2022-12-02 | 2022-12-02 | 一种生成mvp代码的方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211539603.XA CN115756424A (zh) | 2022-12-02 | 2022-12-02 | 一种生成mvp代码的方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115756424A true CN115756424A (zh) | 2023-03-07 |
Family
ID=85342718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211539603.XA Pending CN115756424A (zh) | 2022-12-02 | 2022-12-02 | 一种生成mvp代码的方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115756424A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116594681A (zh) * | 2023-07-18 | 2023-08-15 | 杭州比智科技有限公司 | 一种基于特定场景模块化的脚手架设计方法及系统 |
-
2022
- 2022-12-02 CN CN202211539603.XA patent/CN115756424A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116594681A (zh) * | 2023-07-18 | 2023-08-15 | 杭州比智科技有限公司 | 一种基于特定场景模块化的脚手架设计方法及系统 |
CN116594681B (zh) * | 2023-07-18 | 2023-10-31 | 杭州比智科技有限公司 | 一种基于特定场景模块化的脚手架设计方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7051316B2 (en) | Distributed computing component system with diagrammatic graphical representation of code with separate delineated display area by type | |
KR101795844B1 (ko) | 런타임 시스템 | |
EP3491527B1 (en) | Debugging tool for a jit compiler | |
US20160232017A1 (en) | System and Method for Reloading Constructors | |
Di Cosmo et al. | Supporting software evolution in component-based FOSS systems | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
US20180129494A1 (en) | Detect application defects by correlating contracts in application dependencies | |
US11650810B1 (en) | Annotation based automated containerization | |
CN112882718A (zh) | 编译处理方法、装置、设备及存储介质 | |
Bergmayr et al. | fREX: fUML-based reverse engineering of executable behavior for software dynamic analysis | |
CN115756424A (zh) | 一种生成mvp代码的方法、装置及设备 | |
US8365154B2 (en) | Multi-language software development | |
Bouraqadi et al. | Test-driven development for generated portable Javascript apps | |
US11983090B2 (en) | Setting breakpoints for source code segments enclosed by macros | |
US20230115334A1 (en) | Identifying computer instructions enclosed by macros and conflicting macros at build time | |
Wada et al. | Design and implementation of the matilda distributed uml virtual machine | |
WO2008015110A2 (en) | Methods, apparatus and computer programs for modelling computer programs | |
CN114174983A (zh) | 使用测试向量自动验证高级构造的优化 | |
KR101506656B1 (ko) | 애플리케이션 품질 관리를 위한 시스템 및 그 방법 | |
Andrzejak et al. | Confguru-A system for fully automated debugging of configuration errors | |
Troost | A testing tool visualizing and ensuring data-flow coverage | |
Cicchetti et al. | A model driven approach to upgrade package-based software systems | |
Di Martino et al. | Recognition of dynamic Data structures to support porting of applications to the Cloud | |
Ivanishin et al. | System-wide elimination of unreferenced code and data in dynamically linked programs |
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 |