传统的MVC模式
对于MVC模式,我们可以将可视化UI呈现,UI处理逻辑和业务逻辑分别定义在View,Controller,和Model中。
可视化UI呈现->View
UI处理逻辑->Controller
业务逻辑->Model
MVC模式中,这三者之间的交互并没有严格的限制,比喻允许View和Model直接交互
MVC模式的变体MVP
MVC是一种很广泛的概念,没有对View,Controller,Model之间设置一个严格的规则。所以对于特定的开发框架比如(ASP.NET Web Form),出现了MVC模式的变体。
在ASP.NET Web Form中,MVP中的M和V分别对应MVC中的Model和View,而P(Presenter)代替了Controller。MVP更多的变更时体现在这三者之间的交互上。
在MVP中,能够与Model进行直接交互的只能是Presenter,View只能通过Presenter调用Model。Model在这里保持独立性,与可视化元素的呈现(View)无关,与UI处理逻辑(Presenter)无关
MVP避免了View和Model之间的耦合,更进一步降低了Presenter和View之间的依赖。Presenter依赖的是一个IView的接口,即View实现的接口IView。
MVP三要素之间的交互主要体现在两方面,即View/Presenter和Presenter/Model。Presenter和Model之间,只是Presenter对Model的一个单项调用。而整个MVP之间的核心是View和Presenter之间的交互。依据View和Presenter之间的交互方式,以及View的职责,又将MVP划分为PV(Passive View)和SC(Supervising Controller)两种模式。
PV(Passive View)模式,即是一个被动的View,View不会涉及到任何UI处理的逻辑,所有针对UI元素(控件)的操作都不是View自身来控制的,而是交由Presenter来控制
-->采用PV模式来实现View,需要我们将View中UI元素通过属性的形似暴露出来。具体说就是定义IView接口的时候,需要定义基于UI元素的接口,是Presenter可以对View进行细粒度操作。在理想的情况下,定义IView接口的UI元素属性,应该与平台无关性,不使用控件类型直接定义。PV模式下,所有的UI处理逻辑都定义在Presenter中,接口IView中成员也会变得很多。
-->SC模式,降低了Presenter的复杂度,将简单的UI逻辑转移到View上,这些处理逻辑会在IView接口中定义。对View的操作,View本身并不进行相应,而是将请求转发给Presenter。Presenter针对Model调用,驱动View或者是创建View。
ASP.NET 中的MVC
ASP.NET MVC是建立在ASP.NET平台上,基于MVC模式建立的WEB应用框架。
自定义IHttpModule对Http请求进行拦截,解析出目标请求的Controller和Action。
自定义IttpHandler,对目标Controller激活。
ASP.NET MVC中的Model仅仅是绑定到View上的数据而已,不包含任何的UI逻辑代码。Model仅仅是基于View的,也可以称其为View Model。用于构建ASP.NET的MVC模式可以理解为M(Model)-V(View)-VM(View Model)-C(Control)
传统的MVC模式的更多相关文章
- 基于 Dojo toolkit 实现 web2.0 的 MVC 模式
前言 MVC 模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层.Web2.0 技术由于其良好的用户体验被广泛应用于 WEB 应用的展示层.但是在传统的 web 开发中,展示层的 ...
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载.转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中.现在,很多计算 ...
- 《从零開始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载.转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之中的一个,它最早出如今Smalltalk语言中. 如 ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- ASP.Net MVC开发基础学习笔记(1):走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- Spring mvc 模式小结
http://www.taobaotesting.com/blogs/2375 1.spring mvc简介 Spring MVC框架是一个MVC框架,通过实现Model-View-Controlle ...
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...
- (转)浅析三层架构与MVC模式的区别
MVC模式介绍: MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据 ...
随机推荐
- iOS开发---转换坐标系
- (void)viewDidLoad { [super viewDidLoad]; // 蓝色 UIView *blue = [[UIView alloc] init]; blue.backgrou ...
- php 基础算法(用*表示金字塔)通过hash 比較两个数组同样的数
当作为一名php 程序猿,每天总与数据库打交道,做着最底层的程序猿的工作,開始着手研究一些算法,希望自己能在计算机的道路上走的更远.事实上我更喜欢管理,希望自己能作为一个卓越的管理者,但并不影响我对技 ...
- 那些必须要知道的Javascript
原文:那些必须要知道的Javascript JavaScript是前端必备,而这其中的精髓也太多太多,最近在温习的时候发现有些东西比较容易忽略,这里记录一下,一方面是希望自己在平时应用的时候能够得心应 ...
- CSS背景图片定位
原文:CSS背景图片定位 在网页开发中我们经常需要对图片进行分割(如下图)来使用,而不是分别提供单独的图片来调用,常见的如页面背景,按钮图标等,这样做的好处就是减少请求次数,节省时间和带宽. 对背景图 ...
- 使用线程执行堆栈StackTraceElement设计Android日志模块
假设你想在你的Android自己主动打印程序MainActivity.onCreate(line:37)这样的类名.方法名称(行)登录如何实现? 1.介绍Java线程执行堆栈 Java.lang包中 ...
- selenium2入门 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...
- flash导入图片缩放后出现毛边、失真、锯齿、文字模糊不清晰的情况
原因: 1.flash的性能非常差,这就不得不让它做大量的优化. 2.图片缩放,目前业界有多种算法,画质越好的算法,计算量越大. 3.flash优化了图片缩放,使用了质量非常低的缩放算法.这个做法,保 ...
- 布尔逻辑运算,goto语句
布尔逻辑 bool类型可以有两个值:true或者false. 布尔比较需要使用布尔比较运算符(关系运算符),下图:var1为布尔类型的变量,var2,var3则可以是不同类型.
- Get Resultset from Oracle Stored procedure
http://stackoverflow.com/questions/1170548/get-resultset-from-oracle-stored-procedure
- 使用vs2010复制粘贴代码时特别卡用一段时间就特别卡重启也没用
vs2010编写代码一段时间后复制粘贴特别卡,下拉条也特别卡,这个状况困扰了我两个月,实在忍不住了,去网上搜了搜 有网友说是快捷键冲突,所以我就把其他程序结束了,结果莫名奇妙的瞬间就不卡了.最终弄明白 ...