返回

MVP时代的新玩法:自动生成MVP代码,提升开发体验

Android

Android MVP 代码自动生成插件开发

进入MVVM时代后,MVP模式似乎要被取代。但是,一些MVP项目的代码还不完备,我们不能直接从MVC模式简单粗暴地过度到MVVM模式。这个时候,我们就有必要利用MVP的一些扩展技术来提升MVP的使用体验。

此次,我们不讨论MVP的思想理论,而是探讨一种提升MVP使用体验的方式——自动化生成MVP代码

思想观念的转变: 传统模式中,当我们创建新的功能时,我们需要手动编写MVP文件。在工作量大的情况下,这样的操作十分麻烦,而且容易出错。

现在,我们有了新思路。对于新增加的功能,我们只关注编写功能代码,然后利用代码自动生成器创建相应的MVP文件。有了这种思路,我们相当于把开发重点从MVP转移到核心功能上。

技术方案: 使用Android Studio中的Gradle插件。插件可实现自动化的任务,如根据布局自动生成MVP相关代码。

java
apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.mvp"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["mvp_java_package": "com.example.mvp.mvp"]
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled true
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'com.github.qingmei2:Android-MVP-Generate-Code:1.1.2'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

使用

在编写布局文件时,为了生成对应的MVP代码,我们只需添加以下注解。

<data class="UserBean">
    <variable
        name="user"
        type="com.example.mvp.bean.UserBean" />
</data>

注解的类型由mvp_java_package 配置,如上面配置的com.example.mvp.mvp 。变量名(user )用作MVP文件中的变量。

收获

轻量化
不需要再去写MVP文件的代码,开发更加轻松。

更少出错
自动生成的代码,更不易出错。

降低门槛
有了自动化生成插件,开发人员无需深入了解MVP的代码结构,上手更容易。

演示

Github:https://github.com/qingmei2/Android-MVP-Generate-Code

在线地址:http://android-mvp-generate-code.qingmei2.com/#/

当然,该插件仍在完善中,部分细节还有待解决。欢迎各位提出宝贵意见,共同进步。

用科技提升软件开发体验,我们一直在路上!