QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Web 框架、MVC 和 ASP.NET

  • 2008-11-04
  • 本文字数:1665 字

    阅读完需:约 5 分钟

在社区技术预览版发布只后差不多过了一年,微软才第一次发布了真正算得上是试用版的 ASP.NET MVC 框架。ASP.NET MVC 从根本上脱离了过去所提倡的 WebForms 技术,而被普遍认为是向主流 Web 编程的回归。MVC 模式奠定了许多 Web 框架例如 Ruby on Rails 和 Java Spring 框架等的坚实基础。

不应将 MVC Web 框架与同名的 MVC(Model-View-Controller)模式混为一谈。后者最初是由 Trygve Reenskaug 提出来的。在 Reenskaug 提出的模式中,视图与控制器紧密结合,在之间形成了一对一的映射关系。而在 MVC Web 框架中,视图与控制器是松散耦合的,并且,多个视图与单个控制器相结合的情形可谓司空见惯。

不管你更偏爱哪一种 MVC 的定义,模型(Model)仍然是一种独立的数据展现,它并不知道展现的数据会被如何使用。这与 WebForms 截然相反,在 WebForms 中,数据通常会以视图状态的形式存储在 UI 元素中。

微软的 MVC 框架牺牲了窗体和控件的快速开发能力,通过直接控制 HTML 的输出以换取系统的灵活性和准确性。这种理念上的变化可能代表着一种重心的转移,更加偏向于开发经典 ASP 的程序员,或者非微软语言的程序员,而不是已经具有.NET 编程背景的开发人员。

随着第一个ASP.NET 试用版的发布,其中的某些新特性试图在引导开发人员建立新的思维方式。例如,程序员现在可以通过右键单击相关的控制器类或者敲击Ctrl-M Ctrl-V,就可以创建新的视图,同时,还会生成视图所要绑定的模型对象。

另一个背离WebForms 的特性是对JavaScript 的重视。WebForms 试图对开发人员隐藏JavaScript,将它包装在控件中,或者通过在服务端处理数据的方式,而ASP.NET MVC 却接纳了它。通过创建默认的MVC Web 站点就可获得“Scripts”文件夹,这是通过ASP.NET AJAX 和 jQuery 预先生成的。它对 ASP.NET AJAX 提供了完全的智能感应,而对于后者则给与了部分支持。但这只是暂时的,在未来几周内,对 jQuery 完全支持的标记也将面世。

微软总是对数据绑定情有独钟,ASP.NET MVC 也不例外。微软的“Model Binders”允许开发人员快速地将 HTTP POST 的数据映射为对象的属性,然后再将这些对象发送到控制器类的 action 方法。在本次发布的版本中,增加了对通用.NET 类的默认绑定器(binder)。但是切记在大多数情形下,开发人员还是需要创建他们自己的。

Web 站点的自动测试是微软目前提供的另一个主流概念。与其它框架对于测试只提供口头承诺不同,微软从一开始就对其制定了计划。在测试控制器和模型时,不再需要 Mock,重要的是它们包含了所有可测试的逻辑。视图的测试仍然需要在外部执行,包括针对不同的所支持的浏览器对 HTML 的检查。

ASP.NET 的另一个方面是回归对 HTTP 动词的关注。这一项在更早的技术如经典的 ASP 中殊为重要的内容,WebForms 的开发人员几乎忘记了它们的存在。他们并不知道 post-back 会导致 POST 动作,Response.Redirect 会产生 Get 动作,而仅仅会使用它们。在 ASP.NET MVC 中,HTTP 动词极为重要,这从其 API 中就可看出端倪。在通常的任务中,就像限制某些动作只能执行一个特定的动词时,就可以在控制器的方法中,通过 AcceptVerbs 特性中对其进行标注。

为了便于将微软自己的方法替换为开发人员自己编写的方法,所有 HTML 辅助方法都被定义为扩展方法。这样就可以对它们进行部分替换,或者通过简单地改变 using/imports 语句,完成对整个的替换。

对于那些忠实的 WebForms 迷们,微软也不会抛弃他们。Scott Guthrie 写道:

我总是愿意确定无疑地指出:如果你不喜欢 MVC 模型,或者你觉得它与你的开发方式天生相克,你完全可以置之不理。MVC 模型仅仅提供了一个额外的选择,而不是要替换现有的 WebForms 模型。WebForms 和 MVC 都会被鼎力支持,一以贯之(在.NET 4.0 中,ASP.NET WebForms 会添加更为丰富的 URL 路由特性,更好的 HTML CSS 标记的支持,提供完整地具有 ClientId 属性的控件,更多 AJAX 特性,还有更多特性我会很快在博客中广而告之)。如果你不喜欢 MVC,不用担心,千万不要觉得你应该或者必须使用它,完全不必如此。

查看英文原文: Web Frameworks, MVC, and ASP.NET

2008-11-04 21:262205
用户头像

发布了 109 篇内容, 共 42.5 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

华为大神珍藏版:SpringBoot全优笔记,面面俱到太全了

Java~~~

Java 面试 微服务 Spring Boot 架构师

为什么拥抱能源的数字未来意味着在云上全力以赴

九河云安全

使用PyTorch构建神经网络模型进行手写识别

Shirakawa

神经网络 机器学习 深度学习 PyTorch 手写识别

现有市值管理机器人|交Y机器人系统源码搭建

Geek_23f0c3

做市机器人 去中心化市值管理机器人

贝壳找房基于StarRocks构建全新统一的极速OLAP平台实践

StarRocks

数据库 数据分析 OLAP StarRocks

镜像是什么意思?分类有哪些?

行云管家

网络安全 镜像 堡垒机 云厂商

阿里首席官珍藏,SpringCloud精通日记,血汗全在这了

Java~~~

Java 面试 微服务 Spring Cloud 架构师

【共识专栏】Quorum机制与PBFT

趣链科技

区块链 共识机制 PBFT 共识算法

Github首次开放,一天遭狂转 50w 次!阿里内部不外传的 100 万字 Java 面试手册!

Java 程序员 架构 面试 计算机

拍乐云创始人赵加雨:沉浸式音视频加持数智化未来世界

拍乐云Pano

一周信创舆情观察(7.26~8.1)

统小信uos

写作7堂课——【1.框架式写作】

LeifChen

框架 结构化思维 写作技巧 8月日更

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java~~~

Java 面试 微服务 多线程 架构师

开放搜索电商行业模版驱动业务增长实践

阿里云大数据AI技术

5 分钟,快速入门 Python JWT 接口认证

星安果

Python JWT

维护数据隐私和增强竞争优势的秘密

九河云安全

Linux内核分析学习路线总结(内核人员必看)

Linux服务器开发

操作系统 Linux内核 内核源码 内核开发 驱动开发

中台的前世今生

涛哥 数字产品和业务架构

企业架构 中台架构 中台的由来

番外1. OpenCV 图像处理之图片加载与视频加载

梦想橡皮擦

8月日更

Ipfs未来价值怎么样?Ipfs值得投资吗?

区块链 分布式存储 IPFS fil IPFS未来价值

云计算以及云计算周边词概念简单介绍-行云管家

行云管家

云计算 服务器 云服务

字节跳动Android面试:2021Android大厂面试知识分享

欢喜学安卓

android 程序员 面试 移动开发

一个算法“拿下”两个榜单!爱奇艺ICCV 2021论文提出人手三维重建新方法

爱奇艺技术产品团队

vr 论文 ICCV2021 高精度三维重建

Spark 架构剖析:一个任务是怎么运行的

程序员赤小豆

大数据 spark 架构

Python RPC 不会?不妨看看这篇文章

星安果

Python RPC RPC架构

资深大牛带你了解源码!最新Android面试题整理

欢喜学安卓

android 程序员 面试 移动开发

FastApi-06-请求体-3

Python研究所

FastApi 8月日更

从关门“振动”说起,在这部剧本杀综艺里,爱奇艺隐藏了多少技术“小心机”

爱奇艺技术产品团队

综艺节目 互动视频技术 爱奇艺

一个弱鸡管理者如何带领一支牛逼的队伍?

弱鸡管理者

安全 技术人 创新 技术人应知的创新思维模型 管理经验

最全总结 | 聊聊 Python 数据处理全家桶(存储过程篇)

星安果

Python 数据库

摘下手机赛场的夏季“金牌”,荣耀的“飞人之路”

脑极体

Web框架、MVC和ASP.NET_.NET_Jonathan Allen_InfoQ精选文章