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. WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)

    以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧憬着要是自己能实现这样的UI效果该多好!!!另一个困扰我的问题是,这个 ...

  2. FROONT – 超棒的可视化响应式网页设计工具

    FROONT 是一个基于 Web 的设计工具,在浏览器中运行,使得各类可视化设计的人员都能进行响应式的网页设计,即使是那些没有任何编码技能的设计师.FROONT 使得响应式网页设计能够可视化操作,能够 ...

  3. jQuery原型方法first,last,eq,slice源码分析

    这4个方法中前3个方法很常用大家都见过,但是slice方法可能会以为是数组方法,其实slice也是jQuery的一个原型方法,只不过是底层方法是为其他方法服务的(更具体点是为eq方法服务的),首先还是 ...

  4. 读jQuery源码 - Callbacks

    代码的本质突出顺序.有序这一概念,尤其在javascript——毕竟javascript是单线程引擎. javascript拥有函数式编程的特性,而又因为javascript单线程引擎,我们的函数总是 ...

  5. 微信小程序需要https后台的创业机会思考

    最近比较关注微信小程序,而且微信小程序的后台必须强制要求https, https相对http成本要高很多了. 这里我感觉有2个商机 (1)提供https 中转服务器 ,按流量来收费 (2) 微信小程序 ...

  6. PULL解析XML的运行机制详解

    PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...

  7. 当SD卡拔出时,返回首页,栈中的activity都要清除,只留下首页的activity

    目标:当SD卡拔出时,返回首页,栈中的activity都要清楚,只留下首页的activity 我在清单中注册了一个静态广播: <receiver android:name="com.p ...

  8. 【代码笔记】iOS-关于UIFont的一些define

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  9. css字体家族

    名词解释: 衬线指的是字体起始末端的细节装饰.

  10. 安卓普通类通过classloader访问资源文件

    Android studio不知道怎么设置,才可以在生成APK时把一些文件打包进去. 但是不管怎么样,放在res文件夹下的东西是一定得打包的.所以把一些资源文件放在res/raw这个文件夹里是科学的. ...