MVC

MVC(Mode View Controller)是一种设计模式,它将应用划分为三个部分:

数据(模型)、展现层(视图)、用户交互(控制器)。

一个事件发生的过程:

① 用户和应用产生交互

② 控制器的事件处理器被触发

③ 控制器从模型中请求数据,并将其交给视图

④ 视图将数据呈现给用户

M —— 模型 真正的逻辑处理,存放应用的所有数据对象

不必知道V、C的逻辑,是应用中解耦出来的部分。

V —— 视图 只负责呈现给用户的页面的显示和样式的展示,html、css、js模板组成

除了模板中简单的条件语句,视图不应当包含任何其他逻辑。

将逻辑混入视图是编程大忌,但不是不允许,只要这部分逻辑没有定义在视图内即可。将视觉呈现逻辑归类为“视图助手”(helper):和视图相关的独立的小工具函数。

C —— 控制器 是M和V之间的纽带,进行页面节点事件的注册和控制,以及页面加载性能的实现。

从视图获取事件和输入,进行处理,并更新视图。页面加载时,会给视图添加监听事件,如监听表单按钮点击、提交。


MVVM

MVVM(Model View ViewModel)耦合性比较松,灵活性更强。

M —— 模型 负责业务逻辑和数据的封装

V —— 视图 只负责界面和显示,与显示逻辑无关

VM —— 视图模型 负责了所有的显示逻辑,在模型的基础上对模型数据进行封装,并定义了显示层的逻辑,负责模型与视图的交互。

一个视图模型(VM)可以为多个视图(V)服务,视图层(V)只需要选择视图模型(VM)中的属性、方法并绑定。

优点:

① 低耦合 view可以独立于model变化和修改

② 可重用性 很多view可以用同一个viewmodel

③ 独立开发

④ 可测试 可以针对viewmodel来写测试,测试界面


MVP

MVP(Model View Presenter)切断了view和model的联系,让view只和presenter(原controller)交互,减少在需求变化中需要维护对象的数量。

MVP定义了presenter和view之间的接口,让一些可以根据已有的接口协议去各自分别独立开发,以此去解决界面需求变化频繁的问题。

MVP优点:

① 模型与视图完全分离,可以修改视图但不影响模型

② 可以更高效的使用模型,因为所有的交互都发生在presenter(展示器)内部

③ 可以将一个presenter用于多个视图,而不需要改变presenter的逻辑

④ 如果把逻辑放在presenter中,就可以脱离用户接口来测试这些逻辑(单元测试)

MVP缺点:

因为对视图的渲染presenter中,所以视图和presenter的交互过于频繁。如果presenter过多的渲染了视图,往往会使得它与特定的视图的联系过于紧密,“动一发很可能要牵另一发”。

本文链接:http://www.cnblogs.com/xsilence/p/5998907.html

MVC、MVVM、MVP小结的更多相关文章

  1. MVC,MVVM,MVP的区别/ Vue中忽略的知识点!

    按照顺序学习: https://scotch.io/courses/build-an-online-shop-with-vue/hello-world Vue Authentication And R ...

  2. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  3. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

  4. 转:界面之下:还原真实的 MVC、MVP、MVVM 模式

    前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式 ...

  5. 理解MVC,MVP和MVVM设计模式

    有3个非常受欢迎的MV-*系列设计模式:MVC,MVP,MVVM.他们被广泛应用于不多种结束.这篇文章我回阐述我自己对这3个设计模式的看法. MVC模式: MVC即Model-VIew-Control ...

  6. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)

    最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...

  7. 【转】对MVC、MVP、MVVM的懂得

    [转]对MVC.MVP.MVVM的懂得 转载地址:http://www.myexception.cn/vc-mfc/1612241.html 对MVC.MVP.MVVM的理解 最近看了一堆js框架的文 ...

  8. mvc、mvp、mvvm使用关系总结

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

  9. [转]MVC、MVP、MVVM

    界面之下:还原真实的 MVC.MVP.MVVM 模式 [日期:2015-10-28] 来源:github.com/livoras  作者:戴嘉华 [字体:大 中 小]   前言 做客户端开发.前端开发 ...

  10. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

随机推荐

  1. C# 泛型的协变和逆变

    1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量.协变和逆变是两个相互对立的概念: 如 ...

  2. Community Value再理解

    其实之前写“从香港机房引入google/bitbucket路由”的时候,对community value的了解还并不深入,对Juniper default BGP export/import poli ...

  3. CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  4. 20款时尚的 WordPress 简洁主题【免费下载】

    在这篇文章中,我们收集了20款时尚的 WordPress 简洁模板.WordPress 是最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易 ...

  5. sql搜索数据库中具有某列的表

    在接口中明明有某个节点,但在数据库中却找不到,为此本人写了一个sql,以供快速查找. Select distinct syscolumns.name,sysobjects.name from sysc ...

  6. JavaScript学习笔记-用于模式匹配的String方法

    用于模式匹配的String方法:   String支持4种使用正则表达式的方法:           seach()用于检索,参数是一个正则表达式,返回第一个与之匹配的子串的位置,找不到则返回-1,如 ...

  7. SharePoint 2013 表单认证使用ASP.Net配置工具添加用户

    前 言 上面一篇博客,我们了解到如何为SharePoint 2013配置表单身份认证,但是添加用户是一个麻烦事儿:其实,我们还可以用Asp.Net的配置工具,为SharePoint 2013添加表单用 ...

  8. c++引用总结

    一.变量的引用: 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名:  例:char ch;        cha ...

  9. 修改 Android 5.x 系统默认音量大小

    修改系统默认音量需要改两处地方: 1. frameworks\base\media\java\android\media\AudioManager.java /** @hide Default vol ...

  10. 【代码笔记】iOS-屏幕旋转

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. se ...