惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
I
InfoQ
月光博客
月光博客
量子位
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
D
DataBreaches.Net
宝玉的分享
宝玉的分享
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理

博客园 - Virus-BeautyCode

【新年第一篇】平台的账号管理系统设计的设想 从短信类到短信平台之设计篇 需求分析 在系统集成中面临多个产品的时候如何选择? 动态表单数据库设计 图片存储那些事 动态可配置表单的设计构思 缓存使用的思考1 [翻译].NET框架中的缓存 【翻译】SQL Server索引进阶:第一级,索引简介 网站架构资料收集整理 培养我们的目标感 使用Django来处理对于静态文件的请求 项目-团队-技术-个人(提拔篇) 项目-团队-技术-个人(专业篇) 项目-团队-技术-个人 (团队建设篇) MongoDB在Windows2003上得安装配置及使用 消息提示的架构演进-理论篇 MSSQL2005技术内幕-学习笔记
【翻译】MVC vs. MVP vs. MVVM
Virus-BeautyCode · 2011-11-04 · via 博客园 - Virus-BeautyCode

2011-11-04 17:38  Virus-BeautyCode  阅读(3852)  评论()    收藏  举报

MVC vs. MVP vs. MVVM

1 简介

  原文地址:

     MVC vsMVP vsMVVM « Niraj Bhatt – Architect's Blog

  三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。

 2 MVC MVP

2.1 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还是有点困难的。

2.2 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的复杂逻辑。

3 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更受欢迎。例如:微软的WPF和Silverlight。