jingyc0305 / AACProject

ViewModel+LiveData+Retrifit+RxJava+DataBinding 组合构架的一个基础MVVM架构 (未完善 持续更新...)
0 stars 1 forks source link
传统的MVC

1041439-20180328145335572-1342686894.png

流行的MVP

img


基于MVVM构建Android的基础架构

img

使用方法
api 'com.jyc:aac_library:1.0.1'
注意

android support ->必须是androidx

implementation 'androidx.appcompat:appcompat:1.0.2'

base库默认依赖第三方库

//kotlin
api "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
api "androidx.core:core-ktx:1.0.2"

//rxjava2
api 'io.reactivex.rxjava2:rxjava:2.2.2'
api 'io.reactivex.rxjava2:rxandroid:2.1.0'

//retrofit2
api 'com.squareup.retrofit2:converter-gson:2.5.0'
api 'com.squareup.retrofit2:retrofit:2.5.0'
api 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'

//okhttp
api 'com.squareup.okhttp3:okhttp:3.14.2'
api 'com.squareup.okhttp3:logging-interceptor:3.11.0'

//lifecycle 生命周期
api "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"

//net status 全局网络监听
api 'com.sunchen:netstatusbus:0.1.5'

//base adapter 万能adapter
api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47-androidx'

// log print 日志打印
api 'com.orhanobut:logger:2.2.0'

//popup window 万能弹窗
//api 'com.lxj:xpopup:1.8.7-x'

//glide 图片处理
api 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

//glide 处理变换
implementation 'jp.wasabeef:glide-transformations:2.0.2'

//utils 工具类 很强大
api 'com.blankj:utilcodex:1.25.4'
界面层(MVVM-V)

V层即View层 : 就是 静态的XML文件 负责绘制界面布局 包括

数据层(MVVM-M)

M层即Model层 : 负责定义解析数据 数据来源有:

业务控制层(MVVM-VM)

VM层即ViewModel : 从Repository 仓库获取数据,对数据进行处理,类似Controller和Presenter 的角色,区别是ViewModel 角色比较单纯 不涉及UI相关的操作只处理业务相关数据 通过中间件LiveData与UI进行通讯

img


基于MVVM的代码模块划分总结

UI 界面

​ 1.item视图填充

​ 2.支持一个RecycleView 多Type类型view

​ 3.点击/长按事件

NetWork 网络框架

这里采用RxJava+OkHttp+Retrifit 封装一套完整的网络请求 并需要支持以下接口:

Libs 第三方或自己的

Widgets 自定义公共组件

Utils 工具类

​ 直接使用了强大的AndroidUtilCode

组件通讯

基于binder封装的okbinder 无需创建aidl接口 通过java接口及注解 实现进程间通讯 比较便捷
Base层封装
/**
 * Aidl业务回调接口 须添加 @OkBinder.Interface 注解
 */
@OkBinder.Interface
interface ICallback {
    val data: String
    fun onResult(result: String)
}
/**
 * 抽象的Service
 */
abstract class BaseService : Service() {
    abstract fun initOkBinder():OkBinder
    override fun onBind(intent: Intent?): IBinder? {
        return initOkBinder()
    }
}
UserCase使用层示例
/**
 * 自定义Aidl业务接口 须添加 @OkBinder.Interface 注解
 */
@OkBinder.Interface
interface IRemoteService {
    fun doSomething(data:String,callback:ICallback)
}

/**
 * 具体的Service
 */
class MyService : BaseService() {
   override fun initOkBinder(): OkBinder {
        return OkBinder(object : IRemoteService {
            override fun doSomething(data: String, callback: ICallback) {
                Log.d("okbinder", ">> **data = $data ** <<")
                Log.d("okbinder", ">> **callback.data = ${callback.data} ** <<")
                callback.onResult("I am from binder callback data")
            }
        })
    }
}

类图

类图.png

时序图

1563853417338.png