对MVC、MVP、MVVM的理解

三种模式的结构。
MVC:Model-View-Controller
MVP:Model-View-Presenter
MVVM:Model-View-ViewMode

三者的共同点,也就是Model和View
Model就是领域模型,数据对象,同时,提供外部对应用程序数据的操作的接口,也可能在数据变化时发出变更通知。Model不依赖于View的实现,只要外部程序调用Model的接口就能够实现对数据的增删改查。
View就是UI层,提供对最终用户的交互操作功能,包括UI展现代码及一些相关的界面逻辑代码。

三者的差异在于如何粘合View和Model,实现用户的交互操作以及变更通知

Controller接收View的操作事件,根据事件不同,或者调用Model的接口进行数据操作,或者进行View的跳转,从而也意味着一个 Controller可以对应多个View。Controller对View的实现不太关心,只会被动地接收,Model的数据变更不通过 Controller直接通知View,通常View采用观察者模式监听Model的变化。
Presenter,与 Controller一样,接收View的命令,对Model进行操作;与Controller不同的是Presenter会反作用于 View,Model的变更通知首先被Presenter获得,然后Presenter再去更新View。一个Presenter只对应于一个View。 根据Presenter和View对逻辑代码分担的程度不同,这种模式又有两种情况:Passive View和Supervisor Controller。
ViewModel,注意这里的“Model”指的是View的Model,跟上面那个Model不是一回事。 所谓View的Model就是包含View的一些数据属性和操作的这么一个东东,这种模式的关键技术就是数据绑定(data binding),View的变化会直接影响ViewModel,ViewModel的变化或者内容也会直接体现在View上。这种模式实际上是框架替应 用开发者做了一些工作,开发者只需要较少的代码就能实现比较复杂的交互。

MVP和MVVM完全隔离了Model和View,但是在有些情况下,数据从Model到ViewModel或者Presenter的拷贝开销很 大,可能也会结合MVC的方式,Model直接通知View进行变更。在实际的应用中很有可能你已经在不知不觉中将几种模式融合在一起,但是为了代码的可 扩展、可测试性,必须做到模块的解耦,不相关的代码不要放在一起。
MVC/MVP

这里写图片描述

MVC
  1、View接受用户的交互请求
  2、View将请求转交给Controller
  3、Controller操作Model进行数据更新
  4、数据更新之后,Model通知View数据变化
  5、View显示更新之后的数据
  View和Controller使用Strategy模式实现,View使用Composite模式,View和Model通过Observer模式同步信息。Controller不知道任何View的细节,一个Controller能被多个View使用。MVC的一个缺点是很难对Controller进行单元测试,Controller操作数据,但是如何从View上断言这些数据的变化呢?例如,点击一个View的按钮,提交一个事件给Controller,Controller修改Model的值。这个值反映到View上是字体和颜色的变化。测试这个Case还是有点困难的。

MVP
  1、View接受用户的交互请求
  2、View将请求转交给Presenter
  3、Presenter操作Model进行数据库更新
  4、数据更新之后,Model通知Presenter数据发生变化
  5、Presenter更新View的数据
  Presenter将Model的变化返回给View。和MVC不同的是,Presenter会反作用于View,不像Controller只会被动的接受View的指挥。正常情况下,发现可以抽象View,暴露属性和事件,然后Presenter引用View的抽象。这样可以很容易的构造View的Mock对象,提高可单元测试性。在这里,Presenter的责任变大了,不仅要操作数据,而且要更新View。
  在现实中,MVP的实现会根据View的充、贫血而有一些不同,一部分倾向于在View中放置简单的逻辑,在Presenter放置复杂的逻辑;另一部分倾向于在presenter中放置全部的逻辑。这两种分别被称为:Passive View和Superivising Controller。
  在Passive View中,为了减少UI组件的行为,使用Controller不仅控制用户事件的响应,而且将结果更新到View上。可以集中测试Controller,减小View出问题的风险。
  在Superivising Controller中的Controller既处理用户输入的响应,又操作View处理View的复杂逻辑。
M-V-VM
这里写图片描述
MVVM是在原有领域Model的基础上添加一个ViewModel,这个ViewModel除了正常的属性意外,还包括一些供View显示用的属性。例如在经典的MVP中,View有一个属性IsCheck,需要在Presenter中设置View的IsCheck值。但是在MVVM中的Presenter也会有一个IsCheck属性来同步View的IsCheck属性,可能会用到Observer模式同步IsCheck的值。在MVVM中,Presenter被改名为ViewModel,就演变成了你看到的MVVM。在支持双向绑定的平台,MVVM更受欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值