注:
本篇文章中,提供的MVC MVP MVVM 写法的Demo,与Google的标准写法会存在些许不一样(本文案例demo是基于google的标准写法和本身这几年的工做总结,进行调整后的写法,自认为很是适合本身也比较适合大众的写法
)android
MVC的关系图以下:git
以前作过一个变种MVC的Demo:
https://github.com/xiaxveliang/Android_APPArchitecture_Demo/tree/master
该Demo的相关文档介绍:
https://blog.csdn.net/xiaxl/article/details/72593945github
MVP模式是对MVC模式的改进web
View与Presenter、Model与Presenter均经过接口进行数据交换,从而实现Model层与View层进行解耦。缓存
Model、View、Presenter的关系以下图因此:架构
对MVP最好的了解方式,实际上是googlesamples的todo-mvp
的demo:
googlesamples的todo-mvpdom
对 todo-mvp 不进行介绍…mvvm
googlesamples的todo-mvp
的代码相对较多,这里我作了一个简单Demo (这个Demo是我喜欢的写法),源码地址以下:
Android_APPArchitecture_Demo 工程 normal_mvp 分支svg
这里的Demo与google的todo-mvp 有些不一样,具体表如今:google
为何这么写,这里有一个思考:
怎么样写业务代码更简单,我认为"只作UI展现"不包含“用户交互”的业务逻辑最简单
。那有没有一种代码的写法,能够把用户操做,转化为一种UI的更新操做?
这里我给出的方案是:将“用户交互”转化为一种数据更新
架构图以下:
Model、View、Presenter的关系以下图因此:
对MVVM最好的了解方式,实际上是googlesamples的todo-mvvm-databinding
的demo:
googlesamples的todo-mvvm-databinding
对 todo-mvvm-databinding 不进行介绍…
googlesamples的todo-mvvm-databinding
的代码相对较多,这里我作了一个简单Demo (这个Demo是我喜欢的写法),源码地址以下:
[Android_APPArchitecture_Demo 工程 normal_mvvm 分支]
https://github.com/xiaxveliang/Android_APPArchitecture_Demo/tree/normal_mvvm