1 简介
三者的目的都是分离关注,使得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 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
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。
复杂的软件必须有清晰合理的架构,否则无法开发和维护。
MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用。它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了。
昨天晚上,我读了《Scaling Isomorphic Javascript Code》,突然意识到,它们的区别非常简单。我用几段话,就可以说清。
一、MVC
MVC模式的意思是,软件可以分成三个部分。
视图(View):用户界面。
控制器(Controller):业务逻辑
模型(Model):数据保存
1接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller。
2.另一种是直接通过controller接受指令。
View 传送指令到 Controller
Controller 完成业务逻辑后,要求 Model 改变状态
Model 将新的数据发送到 View,用户得到反馈
基本的MVC所有通信都是单向的。
3.有些实际项目有了变形的MVC是前两种混合并且M与V是双向
实际项目往往采用更灵活的方式,以 Backbone.js 为例。
1. 用户可以向 View 发送指令(DOM 事件),再由 View 直接要求 Model 改变状态。
2. 用户也可以直接向 Controller 发送指令(改变 URL 触发 hashChange 事件),再由 Controller 发送给 View。
3. Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。所以,Backbone 索性取消了 Controller,只保留一个 Router(路由器) 。
四、MVP
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。
1. 各部分之间的通信,都是双向的。
2. View 与 Model 不发生联系,都通过 Presenter 传递。
3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
五、MVVM
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。
唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。Angular 和 Ember 都采用这种模式。
相关推荐
iOS架构模式MVC、MVP、MVVM(内附demo)-附件资源
在Android应用开发中,DataBinding库是一个强大的工具,它提供了数据绑定的功能,使得开发者能够更加...记得,DataBinding是工具,而MVVP或MMVP是设计模式,两者各有侧重点,理解它们的区别对于提升代码质量大有裨益。
"MVPvsMVVM-Android"项目可能包含了两个模块,分别实现了MVP和MVVM架构,你可以通过比较这两个模块的代码结构和组件来理解它们的区别: 1. MVP模块:Presenter通常会有一个与之对应的View接口,Presenter实现了该...
MVVP MVVP架构示例 模型---负责域数据或操纵数据的,请考虑“ Person”或“ PersonDataProvider”类。 视图---负责表示层(GUI),对于iOS环境,请考虑以“ UI”前缀开头的所有内容。 ViewState-视图的状态,由...
MVVP是MVP(Model-View-Presenter)的一种变体,它强调了Presenter与View之间的解耦,并且增加了ViewModel层,以更好地处理数据和视图状态。 MVVP模式的核心思想是将业务逻辑、用户界面和数据模型分离,以提高代码...
MVVP与MVP(Model-View-Presenter)的主要区别在于Presenter和ViewModel的角色。在MVP中,Presenter作为View和Model之间的中介,处理用户事件并负责与Model交互。而在MVVP中,ViewModel不仅负责业务逻辑,还负责数据...
It doesn't use dagger // mvp // mvvp or any other stuff that requires an more in depth knowledge of android. How to use it: Step 1: Fork/Clone this repo. Add a local.properties with your sdk ...
MVC 还有一个衍生架构叫 MVP,因为 MVC 的 View 跟 Control 和 Model 都有耦合关系所以为了解除 View 和 Model 之间的关系,View 不直接读取 Model 而是通过 Control 来转发 View 需要的数据。还有一个衍生架构叫 ...
"MVVP"可能是一个打字错误,应该是"MVVM",即Model-View-ViewModel模式。在MVVM模式下,Model负责业务逻辑和数据处理,View负责显示UI,而ViewModel作为两者之间的桥梁,处理UI与数据模型的交互。 **知识点详细说明...
Flutter架构蓝图 Flutter架构蓝图是一个项目,介绍了MVVM架构和项目结构方法来开发Flutter应用程序。 文献资料 要求 环境 的iOS iOS 13以上 安卓 Android 5.1以上minSdkVersion 22 targetSdkVersion 30 ...
它不使用匕首// mvp // mvvp或任何其他需要更深入了解android的东西。 如何使用它: 步骤1: 分叉/克隆此仓库。 在您的sdk位置添加一个local.properties(它应该由android studio自动完成) 或手动模式:下载该...
#### 十、MVC, MVP, MVVP - **MVC**(Model-View-Controller): - **概念**:将应用分为模型、视图和控制器三个部分。 - **应用场景**:适用于小型项目或模块化的界面设计。 - **MVP**(Model-View-Presenter)...
App莫名其妙的就选择了MVC的组合模式,最近才了解到Presenter和ViewModel:grinning_face_with_sweat:, 之后随着页面需要的数据量与数据类型的增加会更改为MVVP的组合模式的。最近谷歌又推出感觉好多代码可以省了,...
移动办公平台的开发基于Android操作系统,采用了MVVP(Model-View-Presenter)架构,这种架构能够清晰地分离用户界面、业务逻辑和数据模型,便于代码维护和扩展。通过集成4G无线通信技术和移动GIS(地理信息系统),...
我总是学习android并尝试提高自己轮廓技能专长 安卓Kotlin(主要) Java建筑构件XML布局导航组件活动生命周期SQL Firebase实时数据库面向对象翻新会议室数据库(SQLite) 击剑匕首MVVP 滑行真相意式咖啡莫基托 :...
**银光(Silverlight)与WPF中的MVVM框架详解** MVVM(Model-View-ViewModel)设计模式在现代UI开发中占据着重要的地位,尤其在Microsoft的Silverlight和WPF(Windows Presentation Foundation)平台上。...
例如,某些厂商提供的模块电源会标明典型的纹波噪声值,如60mVVP-P,以供用户选择和参考。通过这些细节的设计和优化,可以显著提高电源的整体性能和稳定性,确保为各类电子设备提供清洁、稳定的电源输出。
**Knockout.js** 是一个轻量级的MVVM(Model-View-ViewModel)JavaScript库,主要用于构建富交互的Web应用程序。它通过数据绑定和依赖跟踪机制,使得开发者能够更轻松地实现DOM元素与JavaScript对象之间的同步。...
在Android应用开发中,测试是确保软件质量和可维护性的重要环节。`Android-Test-Coverage`项目专门针对这一需求,提供了单元测试和UI测试的示例,帮助开发者理解和实践这两种测试方法。以下是对这些测试技术的详细...
在IT领域,特别是Windows Presentation Foundation (WPF)的开发中,MVVM(Model-View-ViewModel)设计模式已经成为构建用户界面的主流选择。本主题主要关注如何在WPF项目中运用MVVM模式来实现数据的增删改操作,这...