https://github.com/cn-ljb/mvp-kotlin
快捷、高效、低耦合的Android MVP架构,支持Java、Kotlin混编。
扫码查看Demo App:
- 1、Project的build.gradle文件添加如下代码:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 2、主Module的build.gradle添加依赖:
//mvp core
implementation 'com.github.cn-ljb:kotlin-mvp-lib:1.2.0'
//网络库lib、数据库lib 根据项目实际情况引入
//net lib
implementation 'com.github.cn-ljb:netlib:1.0.1'
//dao lib
implementation 'com.github.cn-ljb:daolib:1.0.1'
lib源码:kotlin-mvp-lib、net-lib、dao-lib
为什么要使用MVP架构?
通常Android项目结构中,我们会在Activity\Fragment中编写大量代码,例如:网络请求、IO操作、数据填充、页面切换等,这种项目结构宏观的称之为MVC。
MVC:我们可以把数据源(网络请求、IO...)看作Model层,xml等布局文件看作View层,Activity\Fragment看作Controller层。但在android中xml能力太薄弱了,以至于Activity做了很多本不属于它的工作。
MVP:在MVP架构中Model层与MVC一样存放数据源(网络请求、IO...),将Activity\Fragment都看作为View层,仅负责UI展示和数据填充,将Model层与View层的交互操作交给Presenter层。
MVP架构图
特点
- 1、V层由Activity和Fragmen组成,且仅负责UI展示、数据填充等工作,分工明确;
- 2、M层完全与V层隔离,P层作为V层与M层的桥梁,承担中间人角色(V通过P获取M数据);
- 3、V层与P层对象相互持有,通过Constract限制两者的访问域,降低耦合;
- 4、P层持有M层对象,通过Constract限制P层可访问域,降低耦合;
扩展
考虑到实际项目中Model层主要操作是net和db,为了统一调用api,对net和db进行了封装,通过Factory.getProtocol()产出具体的操作实例。
net-lib: rxjava2 + rxAndroid + okhttp3 + retrofit2
dao-lib: rxjava2 + rxAndroid + sqlite
我们知道View、Presenter、Model、Constact需要编写固定的套路代码来进行关联,比如集成某一个Base类,实现某个固定接口。
为了提高开发效率,配合该MVP库专门为开发者提供Kotlin MVP Auto插件来帮你统统搞定。
操作: File -> Settings -> Plugins -> Kotlin MVP Auto -> install
- 自动生成View、Presenter、Model、Contract Kotlin文件
操作:包目录右键 -> New MVP Kotlin -> 输入模块名称 -> OK
- 自动生成View、Presenter、Model、Contract Java文件
操作:包目录右键 -> New MVP Java -> 输入模块名称 -> OK