写在前面
记录一下所学到的Android中MVC,MVP,MVVM之间的联系和区别,加深对三种架构的记忆,内容来源于各种博客。
通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题。但设计不能违背目的,对于不同量级的工程,具体架构的实现方式必然是不同的,切忌犯为了设计而设计,为了架构而架构的毛病。
1.MVC架构
MVC比较适用于快速开发的小型项目
MVC结构图

MVC三层之间的关系
模型层(Model)
针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
视图层(View)
对应于xml布局文件和java代码动态view部分
控制层(Controller)
MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,
但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。
(Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉,
这也是MVC适用于小型简单项目的原因)
MVC的总结
- 具有一定的分层,model彻底解耦,controller和view并没有解耦
- 层与层之间的交互尽量使用回调或者去使用消息机制去完成,尽量避免直接持有
- controller和view在android中无法做到彻底分离,但在代码逻辑层面一定要分清
- 业务逻辑被放置在model层,能够更好的复用和修改增加业务
2.MVP架构
通过中间层Preseter实现了Model和View的完全解耦,逻辑更加清晰
MVP结构图

MVP三层之间的关系
模型层(Model)
针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
视图层(View)
对应于xml布局文件和java代码动态view部分
协调层(Presenter)
Presenter为Model和View之间交互的桥梁
MVP的总结
- 由于android本身并没有按照MVP框架进行构建,所以一般我们会采取一些接口,回调的方式来实现MVP
- 随着业务逻辑的增加,一个页面可能会非常复杂,UI的改变是非常多,会有非常多的case,这样就会造成View的接口会很庞大
3.MVVM架构
为了解决view接口庞大的问题,通过双向绑定的机制,实现数据和UI内容,只要想改其中一方,另一方都能够及时更新
MVVM结构图

MVVM三层之间的关系
模型层(Model)
针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。
视图层(View)
对应于xml布局文件和java代码动态view部分
视图模型(ViewModel)
控制M和V之间的交互的
定义
在MVVM中的解耦,其实和MVP中类似,但是因为MVP中需要定义的接口太多,
维护起来较为复杂,MVVP中就把MVP中P负责和V交互的内容给简单化了,
让View直接和数据进行绑定,让xml不再只是一个简单的布局文件,
让它也能够参与到数据的交互中去,数据变化的时候View可以自己去更新界面
总结
- 跟MVP中的P相比,VM显得轻量化一些,由于有databind的存在,不需要去自己同步View和Model,所以MVVM相比MVP的类的数量也会少一些
- 由于元素定义在xml中,View关于绑定的这部分内容是没办法打断点进行测试的,
且对于小的界面,代码量过于庞大,对于复杂的界面,ViewModel又有些难以构建和维护 - 目前官方支持的控件绑定种类不全,很多时候还需要自己定义
开启dataBinding
android {
dataBinding{
enabled true
}
}
可以参考MVVM整合框架
可以学下
先实现,再重构。直接考虑代码不臃肿得话,不知道什么时候了
- 本文链接: https://blog.hansong.icu/2019/10/23/mvc,mvp,mvvm/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。