写点什么

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

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

关注

评论

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

一文讲透低代码开发的优势

高端章鱼哥

软件开发 低代码 应用开发 JNPF

Sentieon | 应用教程: TNscope®使用机器学习模型进行有匹配正常样本的体细胞变异发现

INSVAST

基因测序 应用教程 TNscope

文心一言 VS 讯飞星火 VS chatgpt (81)-- 算法导论7.4 6题

福大大架构师每日一题

福大大架构师每日一题

Node.js 的 Buffer 是什么?面向开发者的指南

Liam

JavaScript node.js 程序员 后端 buffer

交易所系统开发/秒合约交易所/锁仓挖矿/前端uinapp

V\TG【ch3nguang】

交易所开发 秒合约

6种限流实现,附代码![通俗易懂]

王磊

Java Java面试题

【高危】Kubernetes Windows节点kubernetes-csi-proxy提权漏洞 (CVE-2023-3893)

墨菲安全

网络安全 漏洞情报

mysql基础——认识索引

树上有只程序猿

MySQL 索引

ARTS 打卡第二周

直须

个人成长 前端 ARTS 打卡计划

WiFi7 is coming -IPQ9574-QCN9274-speeds up to 30Gbits per second-quaclomm-chipset

wifi6-yiyi

WiFi7 30g

PyTorch 提高生产力的技巧

3D建模设计

机器学习 PyTorch

7个用于机器学习和数据科学的基本 Python 库

3D建模设计

Python AI人工智能

盘点主流的11款管理测试用例的工具

PingCode

测试工具 PingCode 测试用例管理工具

Microsoft Office LTSC 2021 for Mac v16.77 beta中文版

mac

办公软件 苹果mac Windows软件 office2021

ARTS 打卡第二周

直须

个人成长 前端 ARTS 打卡计划

高效数据传输与管理利器:镭速传输方案助力企业提升效率与安全

镭速

数据传输 分发数据 管理数据 镭速数据传输

BetterZip 5中文下载+BetterZip 5注册码

mac大玩家j

Mac软件 解压缩工具 压缩软件

HoudahSpot最新中文版+补丁安装教程

胖墩儿不胖y

Mac软件 文件搜索 搜索工具 搜索软件

实力!云起无垠获“互联网+”市赛一等奖

云起无垠

【中危】Spring Kafka 反序列化漏洞 (CVE-2023-34040)

墨菲安全

网络安全 漏洞情报

火山引擎边缘云,助你沉浸式回忆童年

火山引擎边缘云

CDN CDN加速 内容分发 CDN技术

Paper推荐|「隐私集合求交PSI系列」奖励升级

隐语SecretFlow

大数据 数据安全 隐私计算 开源社区 论文推荐

如何在浏览器中启用 WebGL 以使用 HTML5 3D 查看器

3D建模设计

html5 WebGL 3D 查看器

五种重要的 AI 编程语言

3D建模设计

人工智能 AI

隐语纵向联邦 SecureBoost Benchmark白皮书

隐语SecretFlow

大数据 AI 数据安全 隐私计算 开源社区

推荐前 6 名 JavaScript 和 HTML5 游戏引擎

3D建模设计

游戏引擎

StarRocks 存算分离技术探索活动回顾

StarRocks

数据库 数据仓库 OLAP 存算分离

Tableau Desktop 2019 for Mac(全能数据分析工具) v2019.1.0激活版

mac

数据分析工具 Tableau Desktop 2019 苹果mac Windows软件

量化智能机器人开发,炒币机器人功能部署搭建

V\TG【ch3nguang】

量化交易机器人开发 炒币机器人

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

阿里巴巴云原生

阿里云 云原生 dubbo

动态规划-编辑距离-两字符串集合重排序

alexgaoyh

重排序 动态规划 编辑距离 文本对齐 编辑距离变化过程

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