返回
MVPArms组件化开发攻略:初探一键傻瓜式开发
Android
2023-09-02 16:53:33
MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发
MVPArms的官方快速组件化方案ArmsComponent在初次亮相的时候就一直强调ArmsComponent是一款极速开发框架,更像是一套傻瓜式组件化开发解决方案.
组件化开发有啥好处?我们先来梳理一下:
- 易于维护,降低维护成本:当某些功能模块发生修改时,只需要针对当前修改的模块进行重构即可,维护成本很低;
- 易于扩展,应对需求变化:随着项目不断发展,开发需求必然会发生变化,可能某些功能模块需要更换方案来实现,这种情况下基于组件化开发可以更快速的去适应这种变化,扩展出新的功能模块;
- 易于复用,提高开发效率:组件化开发的核心思想就是复用,例如项目中出现了多个地方使用了ViewPager,而我们通过组件化的思想将ViewPager抽象成一个组件,当其他地方需要ViewPager时,我们只需要直接将此组件集成进去即可,而不是重复造轮子,开发效率大大提升;
随着移动互联网的快速发展,App开发的功能需求变得愈加繁琐,耦合度也会随之升高,项目维护成本也越来越高.而MVPArms组件化方案ArmsComponent就应运而生,它可以帮助开发人员快速构建出一个可维护性极高的组件化项目,开发者完全可以像玩积木一样构建App.
当团队配置不齐全的时候,那么ArmsComponent将会成为你忠实的小帮手,只需一个人就可以轻松实现UI层和业务层的解耦.为什么这么说呢?在ArmsComponent中已经内嵌了一个名叫ArmsKnife的小功能,ArmsKnife集成了ButterKnife和官方路由框架AutoService,我们只需要在开发过程中通过ArmsKnife的InjectBinder注解即可将UI层的点击事件和跳转业务层的功能绑定,当点击事件触发时将会自动调用业务层的相关方法,解耦了UI和业务层的耦合度.
ArmsComponent的傻瓜式快速构建项目流程如下:
- 导入ArmsComponent库
- 配置你需要生成的组件名称及相应的路径
- 运行构建指令
- 构建完成后,替换项目原有工程目录,并手动复制生成的libs目录
快速构建组件化的步骤也是如此,傻瓜式的点一点即可:
- 选择需要添加的组件
- 选择组件存放位置
- 点击构建组件即可
组件化项目构建完成之后,我们还可以通过自定义模版来生成Activity/Fragment/页面等模板代码.
这里我们先来介绍一种通过实现IActivityHelper接口来生成模板的方法,这种方法的灵活性最高,但由于是通过反射实现,因此效率上会比较低,我们只需实现IActivityHelper接口的以下几个方法即可:
- hasTemplate();方法返回该模板是否存在
- handleCreate();方法返回Activity/Fragment等框架代码内容
- handleViewCreate();方法返回View的onCreate()方法的代码内容
- handleViewData();方法返回View中数据绑定的代码内容
- handleViewLogic();方法返回View中事件处理等代码内容
通过这种方法实现出来的模版可以帮助我们快速生成框架代码,但缺点是生成代码是通过反射方式实现的,因此速度上会很慢,不是很推荐使用.
上面介绍的模版生成方式,虽能够满足我们的需求,但是效率实在让人难以接受,那有没有一种既能够满足我们的需求,并且效率也很快的模版生成方式呢?答案是有的.
在MVPArms组件化中引入了对FreeMarker模板引擎的支持,我们可以通过FreeMarker模板引擎来生成我们自己的模版,速度上非常快.不过,在使用FreeMarker模板引擎之前,我们需要先安装FreeMarker的依赖库,其在ArmsComponent官方仓库中已经配置好,我们只需要直接引入即可.
Freemarker模版的编写并不是很复杂,我们来看一个比较常见的Activity模板代码:
```java
package ${basePackage}.${moduleName}.ui.activity;
import android.os.Bundle;
import android.widget.TextView;
import ${basePackage}.${moduleName}.di.component.Dagger${activityName}Component;
import ${basePackage}.${moduleName}.di.module.${activityName}Module;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
/**
* @author ${USER}
* @date ${DATE}
*/
public class ${activityName}Activity extends BaseActivity<${activityName}Presenter> {
@Override
public void setupActivityComponent(AppComponent appComponent) {
Dagger${activityName}Component //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.${activityName}Module(new ${activityName}Module(this))
.build()
.inject(this);
}
@Override
public int initView(Bundle savedInstanceState) {
return R.layout.${activity_layout_name};
}
@Override
public void initData(Bundle savedInstanceState) {
${presenter.name} = mActivityComponent.get(${presenter.name}.class);
${presenter.name}.attachView(this);
}
@Override
public void showLoading() {
showLoadingDialog();
}
@Override
public void hideLoading() {
dismissLoadingDialog();
}
}
如果大家发现上述模板代码有些眼熟,没错,它就是MVPArms项目中的一个默认的模板代码,FreeMarker就是这样,可以直接通过标签语法获取到相应的数据内容,而且,FreeMarker还支持我们自定义标签,可玩性非常强,对于一个大型项目来说,这种模版生成方式真的算是业内良心了,我们只需要在模版中配置好{basePackage},{moduleName},{activityName},{presenter.name},${activity_layout_name}等即可生成模板代码,真正做到了傻瓜式的操作.
本篇文章介绍了MVPArms组件化开发的强大之处,通过ArmsComponent中内嵌的ArmsKnife框架,我们就可以非常便捷的实现UI和业务层的解耦,并且MVPArms组件化开发还支持通过FreeMarker模板引擎来自定义生成模板代码,让你不再为模板代码而烦恼,是非常强大的一套组件化开发解决方案,非常值得大家去体验和学习.