MVC、MVVM、MVP小结
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小结的更多相关文章
- MVC,MVVM,MVP的区别/ Vue中忽略的知识点!
按照顺序学习: https://scotch.io/courses/build-an-online-shop-with-vue/hello-world Vue Authentication And R ...
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
- 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 的目的是 ...
- 转:界面之下:还原真实的 MVC、MVP、MVVM 模式
前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式 ...
- 理解MVC,MVP和MVVM设计模式
有3个非常受欢迎的MV-*系列设计模式:MVC,MVP,MVVM.他们被广泛应用于不多种结束.这篇文章我回阐述我自己对这3个设计模式的看法. MVC模式: MVC即Model-VIew-Control ...
- UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)
最近UWP开发在海外很潮流,随着微软收购Xamarin,我们这些C#程序员也可以靠这杆小米枪挑战Android,IOS平台了. 那我们为什么选择MVVM做UWP开发?MVC,MVP,MVVM他们之间到 ...
- 【转】对MVC、MVP、MVVM的懂得
[转]对MVC.MVP.MVVM的懂得 转载地址:http://www.myexception.cn/vc-mfc/1612241.html 对MVC.MVP.MVVM的理解 最近看了一堆js框架的文 ...
- mvc、mvp、mvvm使用关系总结
MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法 ...
- [转]MVC、MVP、MVVM
界面之下:还原真实的 MVC.MVP.MVVM 模式 [日期:2015-10-28] 来源:github.com/livoras 作者:戴嘉华 [字体:大 中 小] 前言 做客户端开发.前端开发 ...
- Android App的架构设计:从VM、MVC、MVP到MVVM
随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...
随机推荐
- C# 如何实现带消息数的App图标
上次写了一篇博文,但是每次更新图标时,桌面会闪烁(刷新),有博友说人家的图标都不会刷新,还能动画.我想了一下,如果要达到这个效果,可以用Form来实现,就是在Form中嵌入一个图片,然后用一个labe ...
- Photopile JS – 帮助你实现精致的照片堆叠效果
Photopile JS 是模拟照片散布堆叠在一起的 JavaScript/jQuery 图片库.点击缩略图,照片会弹出放大 ,再次点击照片会返回.缩略图是可拖动的,允许照片深深的堆在一起而不被覆盖, ...
- 13个风格独特的关于页面(About Pages)设计
如何向其他人呈现你自己和你的作品呢?关于页面的设计是非常重要的,以让你的观众更多地了解你,你的工作和你的想法.这是一个很好的方式来获得更加个性化的展示效果. 设计一个漂亮的关于页面是具有挑战性的.出于 ...
- JavaScript 事件入门
一.事件介绍 JavaScript 有三种事件模型:内联模型.脚本模型和 DOM2 模型. 二.内联模型 //在 HTML 中把事件处理函数作为属性执行 JS 代码 <input type=&q ...
- [deviceone开发]-do_SlideListView的简单示例
一.简介 利用提供的SlideListVIew实现那种cell可以滑动露出底部按钮的功能 主要组件:do_slidelistview 二.效果图 三.相关讨论 http://bbs.deviceone ...
- '[<NSObject 0x8a4b500> setValue:forUndefinedKey:]
Bug如下: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUnd ...
- JavaSE 和 JavaEE 的关系
1.javaSe看成是java基础 (Standard Edition(标准版) ) 2.J2EE看成是应用 (Enterprise Edition(企业版)) 3.java ...
- iOS cookie问题
获取cookie时汉字应转换为UTF8格式
- GHOST WIN7系统64位经典优化版 V2016年
来自系统妈:http://www.xitongma.com 深度技术GHOST win7系统32,64位经典优化版 V2016年3月 系统概述 深度技术ghost win7系统64位经典优化版适用于笔 ...
- Android IPC机制之ContentProvider
ContentProvider:即内容提供者,用来管理数据,并对外暴露一个uri,外部可以通过uri和数据建立联系并获取或操作数据: 服务端:1.首先创建一个数据库类,并创建一个表:2.创建一个Con ...