传统的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)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据 ...
随机推荐
- sqlserver检测数据库是否能连接的小技巧
有时候可能需要检测下某台机器的服务是不是起来了,或者某台机器的某个库是不是能被连接又不能打开ssms也不想登陆服务器的话就可以用这个方法. 1.在桌面上右键创建个文本,然后改后缀名为udl以后保存(1 ...
- 4. SQL Server数据库状态监控 - 作业状态
原文:4. SQL Server数据库状态监控 - 作业状态 有很多地方可以设置定时任务,比如:Windows的计划任务,Linux下的crontab,各种开发工具里的timer组件.SQL Serv ...
- 快速构建Windows 8风格应用12-SearchContract概述及原理
原文:快速构建Windows 8风格应用12-SearchContract概述及原理 本篇博文主要介绍Search Contract概述.Search Contract面板结构剖析.Search Co ...
- 快速构建Windows 8风格应用5-ListView数据控件
原文:快速构建Windows 8风格应用5-ListView数据控件 本篇博文主要介绍什么是ListView数据控件.如何构建ListView数据控件. 什么是ListView数据控件? 1) Li ...
- 调查问卷Html5发展综述
[Html5可以离线操作.是否能开发Html5离线网络应用程序] 按常理Html5开发出来的是Web网页应用.则需网络连接才干下载并使用,作为Html5对离线应用开发的支持最大的特殊,支持离线须要满足 ...
- dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured
dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured start: ...
- jQuery在html有效,在jsp无效的原因
最近用jQuery来写下拉框的选项值的左右移动,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- GridView动态增加行
GridView动态增加行GridView动态增加行 很多时候,我们需要可编辑的表格,来比较方便的进行数据的录入,比如学习成绩的录入.当然这就要求能够动态的增加行,来一次性录入多个学生的信息.现在用A ...
- 解决Github使用Fastly CDN而导致不能加载网页的方法
Github现在基本属于“安全”网站,但 Github使用fastly.net的CDN服务后,其网站在国内经常不能正常加载网页.github.global.ssl.fastly.net的亚洲IP一般为 ...
- Linq无聊练习系列2--select/distinct练习
void dataBindByWhere() { /**************select/distinct 练习*******************/ //获 ...