MVP模式

模型-视图-表示器,也就是MVP模式。是mvc模式的一种衍生模式,专注于改进表示逻辑。

与MVC不同,来自view的调用将委托给presenter(表示器),表示器通过接口与view对话。

MVP中的view是被动的,里面包含一点代码逻辑或者零逻辑,我们专业的说:这个view是很轻的。

MVP的原理:view进行请求,表示器执行任何与用户请求有关的工作,并将数据回送给它们。表示器检索数据并且操作数据,并且确定应该如何在view中显示这些数据。model模型改变时,是表示器收到通知,然后更新view,因此表示器要订阅model。在这种模式中,没有直接数据绑定的概念了。

具有非常复杂的view和大量用户交互的应用程序可能不适合MVC模式,因为这样会依赖多个控制器。但是在mvp中,所有这些复杂的逻辑可以封装在一个表示器中,这可以大大简化维护工作。

Backbone既可以理解成mvc模式,也可以理解成mvp模式,我们暂且把backbone归结为mv*模式。

MVVM模式

模型-视图-视图模型是一种基于MV*的架构模式,它试图更清晰的将用户界面开发从应用程序的业务逻辑与行为中分离。

为此,很多这种模式的实现都要利用声明式数据绑定来实现将view工作从其他层分离。

这有助于在同一个代码库中UI和开发工作的同时进行。UI开发人员在HTML编写中,编写与viewmodel的绑定,业务逻辑的开发人员编写model和viewmodel。

MVVM中的model

model保存着信息,但是通常不处理行为,它们不会格式化信息或影响数据在浏览器中显示的方式。数据格式化是由view来处理的,而行为被认为是业务逻辑,应该封装在与model交互的另一层中viewmodel中。

MVVM中的view

view实际上仅仅是与用户进行交互的。但是MVVM中的view包含数据绑定,事件和行为,并且需要对viewmodel有了解。虽然,这些东西都可以被映射到属性中,但view仍然负责处理viewmodel的事件。

我们要牢记:view并不负责处理状态,它仅仅是让状态与viewmodel保持同步。

MVVM中的viewmodel

可以将viewmodel作为一个专门的controller,它将model信息转变为view信息,同时还将命令从view传递到model。

view和viewmodel之间通过数据绑定和事件进行通信。

view处理自己的用户界面事件,必要时将它们映射到viewmodel。

model和viewmodel上的属性通过双向数据绑定进行同步和更新。

viewmodel可以为了数据绑定而暴露model或model属性,也可以包含接口,用于获取和操作view中暴露的属性。

总结:mvp和mvvm都是mvc的衍生品。

在mvc中,view位于架构之上,与controller相邻,model位于controller之下,因此view了解controller,controller了解model。view可以直接访问model。

在mvp中,controller的作用被presenter所替代。表示器与view位于同一位置,表示器监听view和model的事件。

在mvvm中,我们可以创建model特定于view的子集,也就是说,我们无需向view暴露整个model。view可以绑定到viewmodel上的属性,而属性会将model所包含的数据暴露给view。

在我们实际的开发中,是使用MV*模式的backbone还是使用MVVM模式的angularjs,Backbone的优势在于它易于与RESTful服务相集成。而angularjs重点关注自动化UI绑定。个人发现angularjs更适用于小型应用程序,Backbone适合创建大型应用程序。但是仁者见仁智者见智,具体情况具体对待。

加油!

MVP模式和MVVM模式的更多相关文章

  1. 对MVC模式与MVVM模式的认识

    MVC模式与MVVM模式目的一样,主要是分离模型(model)和视图(view),具体介绍如下. 名词介绍 MVC模式:指的是模型(Model)-- 视图(View)-- 控制器(Controller ...

  2. MVP模式与MVVM模式

    1.mvp模式(Model层 Presenter层 View 层) Model层 :数据层(ajax请求) Presenter层:呈现层,view逻辑相关的控制层,控制层可以去调Model去发ajax ...

  3. 浅谈MVC模式与MVVM模式的区别

    MVC模式: M:Model(数据模型),用于存放数据 V:View(视图),也就是用户界面 C:Controller是Model和View的协调者,Controller把Model中的数据拿过来给V ...

  4. MVC模式 和 MVVM模式

    MVC模式 模型 - 视图 - 控制器或MVC,MVC是普遍的叫法,是一种软件设计模式,用于开发Web应用程序.模型- 视图 - 控制器模式是由以下三部分组成: 模型/Model - 一个负责维护数据 ...

  5. MVC模式和MVVM模式简单理解

    相信这是两个耳熟能详的词了,MVC广泛的用到了java的各种框架当中,比如Struts2, SpringMVC等,作为B/S架构开发,MVS模式也是我们必须掌握的. mvc一步一步演化之后有了现在的M ...

  6. Android mvp模式、mvvm模式

    MVC和MVP的区别2007年08月08日 星期三 上午 09:23 MVC和MVP到底有什么区别呢? 从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的!从而,View里会 ...

  7. [vue]mvc模式和mvvm模式及vue学习思路(废弃)

    好久不写东西了,感觉收生疏了, 学习使用以思路为主, 记录笔记为辅作用. v-if: http://www.cnblogs.com/iiiiiher/p/9025532.html v-show tem ...

  8. MVC、MVP、MVVM模式的概念与区别

    1. MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示 ...

  9. MVVM模式的几个开源框架

    原文:MVVM模式的几个开源框架 实现MVVM的框架有很多,如: • MVVM Light Toolkit: http://mvvmlight.codeplex.com • Microsoft Pri ...

随机推荐

  1. Digests from CG articales

    Turtle Talk Prior to the on-set motion capture, the team had the actors perform expressions while be ...

  2. 树莓派3B 安装微雪LCD5inch显示器(包含软键盘)

    树莓派单独使用时,往往需要触摸屏和软键盘用以方便操作,微雪LCD显示器就能较好的实现这个功能, 正好实验室又买入了一个3B的板子和一个5inch的显示器,便对着官方的安装手册,亲自安装了一次. 一:材 ...

  3. JDBC 数据库连接池 小结

    原文:http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html 当对数据库的访问不是很频繁时,可以在每次访问数据库时建立一个连接,用 ...

  4. 重写类的Equals以及重写Linq下的Distinct方法

    当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...

  5. html-tab page

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. DBSCAN——python实现

    # -*- coding: utf-8 -*- from matplotlib.pyplot import * from collections import defaultdict import r ...

  7. unity3d加载默认工程秒退怎么办

    加载Unity3D工程时出现秒退, 怎么尝试都没有用(已经确定了项目路径名称全部为英文). 然后就再也没办法打开Unity3D了,因为一打开它就会默认加载上回的工程. 解决办法: 把最后一次加载的工程 ...

  8. JavaScript的toString()和valueof()方法

    toString()方法: 函数:函数 (function(){}).toString(); //返回"function(){}" typeof((function(){}).to ...

  9. UNIX网络编程-Select模型学习

    1.相关接口介绍 1.1 select ---------------------------------------------------------------------- #include ...

  10. (整理)C#基础知识_泛型的实现

    本文是截取自MSDN的文章部分,方便自己查看,原文地址:https://msdn.microsoft.com/zh-cn/library/ms379564(VS.80).aspx 泛型实现 表面上,C ...