MVC,MVP 和 MVVM区别

91 阅读2分钟

MVC(Model-View-Controller)是最常见的一个软件架构,软件可以分成三个部分

  • 模型(Model):数据保存
  • 视图(View):用户界面。
  • 控制器(Controller):业务逻辑

它们三个的通信过程

  1. View 传送指令到 Controller
  2. Controller 完成业务逻辑后,改变 Model的状态
  3. Model 将新的数据发送到 View,用户得到反馈

它的通信都是单向的。
Android中的MVC进行了代码的分离,但是分离程度不够,Activity依旧需要处理UI,处理用户交互,承担部分View的角色,C层跟V层缠在一起,太紧密了,都在Activity中,C层干预V层太多,进化成MVP

MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。

  1. 各部分之间的通信,都是双向的。
  2. View 与 Model 不发生联系,都通过 Presenter 传递。
  3. View 非常薄,没有任何业务逻辑,就是一个"被动视图",没有任何主动性,而Presenter非常厚,所有业务逻辑在那里,P层通过M层拿数据,通过V层显示,具体内容都是各自管。V层xml跟Activity

MVP

优点:统一了编程规范,代码比较清晰,做到了代码分层和解耦

缺点:类变多,增加了各种回调的接口,代码变得更加复杂,不利于维护

MVVM 模式将 Presenter 改名为 ViewModel,其实本质就是 MVP + 数据绑定

数据 : 1.外部数据(数据库,网络上的)2.内存数据 3.表现数据,要改变一起都变

通过观察者模式监听数据的变化,规避了MVP的双向依赖,但是会导致多数据流的问题,缺少唯一修改源,不易于追踪。