设计模式的一点总结

演变过程:MVC –> MVP –> MVVM

Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model。
View:也很简单,就是展现出来的用户界面。

web开发中主要是从数据库中读出数据,展现到界面上,还有就是用户从界面输入,接收输入数据后,写入到数据库中。所以,对于数据存储(model)和界面(view)这两层都是一样的,主要是如何把model展现到view上,以及如何把数据从view写入到model里,不同的模式会不一样。

MVC:界面上的每个变化都是一个事件,只需要针对每个事件写一堆代码,来把用户的输入转换成model里的对象就行了,这堆代码可以叫controller。

MVP:与MVC最大的一个区别就是:View 与 Model 不发生联系,MVP中的view并不直接使用Model,都通过 Presenter 传递(Presenter代替了Controller),比Controller有更多处理方式,也更加复杂。Presenter处理事件,执行相应的逻辑,这些逻辑映射到Model操作Model。那些处理UI如何工作的代码基本上都位于Presenter。

MVVM: 给view里面的控件命名一个对应的数据对象,只要对象有改变,view里面显示的内容自动更新,反之亦然。

MVC模式最初生根于服务器端的Web开发,后来渐渐能够胜任客户端Web开发,能够满足其复杂性和丰富性。
MVC是Model-View-Controller的缩写,它将应用程序划分为三个部分: Model: 模型(用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法) View: 视图(渲染页面) Controller: 控制器(M和V之间的连接器,用于控制应用程序的流程,及页面的业务逻辑)

MVC特点:
MVC模式的特点在于实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦。在客户端web开发中,就是将模型(M-数据、操作数据)、视图(V-显示数据的HTML元素)之间实现代码分离,松散耦合,使之成为一个更容易开发、维护和测试的客户端应用程序。

过程:View 传送指令到 Controller ; Controller 完成业务逻辑后,要求 Model 改变状态 ; Model 将新的数据发送到 View,用户得到反馈,MVC的通信方向都是单项的,也就是
这里写图片描述

MVC流程:
MVC的流程方式一共有两种:
一种是用户通过给view传达指令,View 传送指令到 Controller,然后Controller 完成业务逻辑后,要求 Model 改变状态,最后Model 将新的数据发送到 View
这里写图片描述
第二种是通过controller,用户通过给controller传达指令,然后Controller 完成业务逻辑后,要求 Model 改变状态,最后Model 将新的数据发送到 View
这里写图片描述

MVC优点:
1.耦合性低,视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码。
2.重用性高
3.由于使用MVC模式降低代码耦合度,因此可以很方便的扩展现有程序
4.可维护性高,不同代码模块职责划分明确,有利于代码的维护与升级

MVC的缺点:
1.不适合小型,中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
2.视图,控制器间连接过于紧密,视图+控制器应该是相互分离,缺少其中任何一个,则另一个应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
3.视图对模型数据的低效率访问,依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

MVP(Model-View-Presenter)是MVC的改良模式,由IBM的子公司Taligent提出。
和MVC的相同之处在于:Controller/Presenter负责业务逻辑,Model管理数据,View负责显示只不过是将 Controller 改名为 Presenter,同时改变了通信方向。

这里写图片描述
MVP特点:
1.MVP之间双向通信。 View 与 Model 不通信,都通过 Presenter 传递。
2.Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。 View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
3.Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。不仅如此,还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试–从而不需要使用自动化的测试工具。

与MVC的不同之处:
1.在MVP中,View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。
2.在MVC中,View会直接从Model中读取数据而不是通过 Controller。

MVP优点:
1.模型与视图完全分离,我们可以修改视图而不影响模型;
2.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;
3.可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;
4.如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。

不足: 视图和Presenter的交互过多,链接紧密。也就是说,视图变了,presenter也要跟着变。
应用: 可应用与Android开发。

MVVM是Model-View-ViewModel的简写。微软的WPF(Windows Presentation Foundation–微软推出的基于Windows 的用户界面框架)带来了新的技术体验, 使得软件UI层更加细节化、可定制化。与此同时,在技术层面,WPF也带来了 诸如Binding(绑定)、Dependency Property(依赖属性)、Routed Events(路由事件)、Command(命令)、DataTemplate(数据模板)、ControlTemplate(控制模板)等新特性。MVVM模式其实是MV模式与WPF结合的应用方式时发展演变过来的一种新型架构模式。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
这里写图片描述
与MVP的区别:
MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致,唯一的区别它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然,比如angular

MVVM优点:
MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model),有几大优点:
1.低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2.可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3.独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。

缺点:
1.对于过大的项目,数据绑定需要花费更多的内存
2.数据绑定使得 Bug 的不确定性增大,你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。

本文是在读阮一峰先生的博客后总结成的
原文链接如下:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值