2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:262530
用户头像

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

关注

评论

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

《Go 开发指南》-管理 Go 环境

看山

Effective-go 10月月更

不愧是阿里P8架构师总结的Java面试笔记,上线仅七天,Github标星55K

Java 程序员 架构 面试 后端

架构1期模块九作业

五只羊

架构实战营

(实战篇)漫游语音识别技术—带你走进语音识别技术的世界

攻城先森

深度学习 音视频 nlp 语音识别

Zabbix VS Prometheus :哪个更适合你

耳东@Erdong

后端 Prometheus zabbix 引航计划 10月月更

12道Zookeeper高频面试题,你顶得住吗?

Java 架构 面试 分布式 后端

模块六作业

Geek_fc100d

「架构实战营」

太牛了!同事凭借这份Java面试题1000道手册(pdf)入职了阿里,定级P7

Java spring 程序员 架构 编程语言

这份阿里P8撰写的面试笔记就是逊了!才帮助十几个人圆了大厂梦

Java 架构 面试 程序人生 编程语言

40K成功入职:六年开发终获小米Offer(附面经+面试题+答案详解)

Java spring 程序员

音视频全链路开发实践|引航计划|音视频

轻口味

音视频 引航计划 内容合集 技术专题合集

这份笔记太牛了!手把手教你从零开始搭建Spring Cloud Alibaba!

Java 架构 面试 程序人生 编程语言

(深入篇)漫游语音识别技术—带你走进语音识别技术的世界

攻城先森

深度学习 音视频 nlp 语音识别

微博评论系统架构设计

guangbao

模块五作业

Geek_fc100d

「架构实战营」

面试进阶必备:“阿里爸爸”高并发秒杀架构设计笔记(全彩版)

Java 架构 面试 程序人生 编程语言

Spark 系列教程(2)运行模式介绍

Se7en

华为大佬的“百万级”MySQL笔记,基础+优化+架构一键搞定

Java 架构 面试 程序人生 编程语言

Apache ShenYu源码阅读系列-基于ZooKeeper的数据同步

子夜2104

Java 网关 shenyu

🏆【Alibaba工具型技术系列】「EasyExcel技术专题」实战技术针对于项目中常用的Excel操作指南

码界西柚

Excel EasyExcel Alibaba Alibaba技术 10月月更

Python代码阅读(第33篇):反转字典

Felix

Python 编程 Code Programing 阅读代码

靠这份GitHub star过万的1121页图解算法成功杀进字节跳动

Java 架构 面试 程序人生 编程语言

让我薪资提升了个新高度!这份阿里核心教程:理解JVM垃圾回收器手册帮了我大忙!

Java 架构 面试 程序人生 编程语言

2021年常见面试真题汇总,含了14个技术栈,已助我成功拿到腾讯offer!

Java 架构 架构师 java面试

毕业设计项目

燕燕 yen yen

架构是训练营

架构实战营模块九作业

maybe

金九银十一线大厂Java面试题大全(整理版)1000+面试题附答案详解,最全面详细!

Java 程序员 架构 面试 后端

【LeetCode】字符串中的单词数Java题解

Albert

算法 LeetCode 10月月更

架构实战营 毕业总结和毕业设计项目

李东旭

「架构实战营」

Android平台音视频实战|引航计划|音视频

轻口味

音视频 引航计划 内容合集 技术专题合集

私有云部署系列之动态IP获取(程序编写)

稻草鸟人

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