写点什么

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

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

关注

评论

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

【API进阶之路】API带来的微创新,打动投资人鼓励我创业

华为云开发者联盟

学习 视频 API

如何降低young gc时间

AI乔治

Java 架构 GC GC算法

快速掌握并发编程---ArrayBlockingQueue 底层原理和实战 java

田维常

并发编程 LinkedBlockingQueue

架构训练营-week7-学习总结-性能测试,操作系统,锁

于成龙

架构训练营

电子劳动合同来了 足不出户也能签约

CECBC

社会保险 电子合同

4年Java经验,去面试居然10分钟就结束了,现在面试为什么这么难?

Java架构之路

Java 程序员 架构 面试 编程语言

熟悉又陌生的 k8s 字段:SecurityContext

郭旭东

Kubernetes Kubernetes源码

【原创】SpringBoot 这几种配置文件方式,你都用过吗?

田维常

springboot

浅析一个较完整的SpringBoot项目

田维常

sping

Spring Boot 集成 Druid 监控数据源

田维常

springboot

美国大选观战感受:用区块链投票吧,少操点心

CECBC

区块链 投票机制

华为云专家私房课:视频传输技术选型的三大法宝

华为云开发者联盟

音视频 视频 传输

快速掌握并发编程---关于乐观锁、悲观锁、可重入锁

田维常

并发编程

第六周学习技术选型2总结

三板斧

量化交易系统开发、自动对冲策略搭建

薇電13242772558

区块链

【原创】Spring Boot集成Mybatis的玩法

田维常

springboot

Github标星35K+超火的Spring Boot实战项目,附超全教程文档

Java架构之路

Java 程序员 架构 面试 编程语言

偷师Kubernetes源码,学会怎么用Go实现调度队列

网管

Kubernetes 并发编程 并发控制 Go 语言

【原创】Spring Boot集成Redis的玩法

田维常

spring Boot Starter

全国区块链信息服务备案超千个

CECBC

区块链 金融

饱受毕设摧残计算机系师兄,怒而分享纯净版SSM框架(附源码)

小Q

Java 学习 面试 开发 SSM框架

中国程序员超5000万?一线城市IT岗位已开始饱和过剩?

Java架构师迁哥

运筹帷幄之后,决胜千里之外!GitHub上标星75k+的《Java面试突击手册》助你拿到满意的offer。

Java架构之路

Java 程序员 架构 面试 编程语言

轻松使用TensorFlow进行数据增强

计算机与AI

tensorflow 学习 数据增强

如何快速构建Spring Boot基础项目?

田维常

spring Boot Starter

登陆!Let's Start Coding

蚂蚁集团移动开发平台 mPaaS

移动开发 mPaaS

华为云FusionInsight MRS:助力企业构建“一企一湖,一城一湖”

华为云开发者联盟

数据库 云原生 数据

【原创】Spring Boot 集成Spring Data JPA的玩法

田维常

springboot

【原创】Spring Boot一口气说自动装配与案例

田维常

springboot

【原创】SpringBoot快速整合Thymeleaf模板引擎

田维常

springboot

日常工作参数分析

hasWhere

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