banner
NEWS LETTER

MVC,MVP和MVVM

Scroll down

写在前面

记录一下所学到的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整合框架

MVVMHabit

可以学下

先实现,再重构。直接考虑代码不臃肿得话,不知道什么时候了

Android高精战争(MVC、MVP、MVVM)

其他文章
目录导航 置顶
  1. 1. 写在前面
  • 1.MVC架构
    1. 1. MVC结构图
    2. 2. MVC三层之间的关系
  • 2.MVP架构
    1. 1. MVP结构图
    2. 2. MVP三层之间的关系
  • 3.MVVM架构
    1. 1. MVVM结构图
    2. 2. MVVM三层之间的关系
    3. 3. 可以参考MVVM整合框架
    4. 4. 可以学下
  • 先实现,再重构。直接考虑代码不臃肿得话,不知道什么时候了
  • 请输入关键词进行搜索