写点什么

Web 框架、MVC 和 ASP.NET

2008 年 11 月 04 日

在社区技术预览版发布只后差不多过了一年,微软才第一次发布了真正算得上是试用版的 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:261644
用户头像

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

关注

评论

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

甲方日常 69

句子

工作 随笔杂谈 日常

架构师训练营第一期 - 第十二周课后作业

卖猪肉的大叔

极客大学架构师训练营

重点人员动态管控系统开发,智慧公安情报研判平台

135深圳3055源中瑞8032

iOS面试基础知识 (二)

iOSer

ios 面试题 iOS面试

JVM的艺术—JAVA内存模型

云流

Java jdk JVM

Android uni-app 封装原生插件

anyRTC开发者

uni-app android 音视频 跨平台 聊天室

原来只想简单看一下String源码,没想到整理了这么多知识点

小Q

Java 学习 编程 面试 string

全人类的数字化迁徙在加速完成 | 读《区块链:分布式商业与智数未来》

邓瑞恒Ryan

创业 读书笔记 金融 经济 战略

三分钟看懂新一代.Net Core3.1工作流引擎平台

Learun

敏捷开发

智能警务平台搭建,公安一体化警务实战解决方案

t13823115967

智慧公安 智慧警务系统开发

智慧社区服务平台开发,平安小区建设

t13823115967

智慧城市 平安小区

mybatis分页插件如何实现?

田维常

mybatis

英特尔正式发布全新一代内存和存储产品

新闻科技资讯

智慧警务大数据平台开发,大数据可视化分析系统

135深圳3055源中瑞8032

智能合约DAPP软件系统开发

开發I852946OIIO

系统开发

十一周作业

走走,停停……

盘点 2020 | 一枚程序员的跑步之路

Simon

程序员 跑步 锻炼 盘点2020

区块链农产品溯源应用开发,农产品可追溯系统

135深圳3055源中瑞8032

《Tensorflow:实战Google深度学习框架》.pdf

田维常

我是如何拿到蚂蚁金服offer?看完2020年Java研发岗复盘经验总结,是时候让面试官懵逼了

比伯

Java 编程 架构 面试 程序人生

盘点2020 | 热点事件回顾这一年经历的共同记忆

Java_若依框架教程

盘点2020

智慧社区管理平台开发解决方案,社区智能管控系统建设

WX13823153201

智慧社区管理平台开发

线程池的7种创建方式,强烈推荐你用它...

王磊

Java

架构师训练营第一期 - 第十二周学习总结

卖猪肉的大叔

极客大学架构师训练营

第十周作业

走走,停停……

亿级流量背后战场,京东11.11大促全方位技术揭秘

京东科技开发者

云计算

最简单的 K8S 部署文件编写姿势,没有之一!

万俊峰Kevin

golang Kubernetes

深入浅出 Go - sync/atomic 源码分析

哈希说

golang

微信昵称可以加雪花了,个性又好看

程序员生活志

工具 微信名 雪花

IT民工闲话·点一盏灯

IT民工大叔

成长 IT 传承

实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF

Java架构追梦

Java MySQL 学习 架构 面试

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

Web框架、MVC和ASP.NET-InfoQ