写点什么

ASP.NET MVC 3 拥抱动态类型

  • 2010-12-13
  • 本文字数:1019 字

    阅读完需:约 3 分钟

大约十年前,微软将全部赌注压在了 WebForms 和静态类型上。随着从零散到完整封装的不断发展,现在的每个页面几乎都可以看作是自己的程序。随后几年,业界向另一个方向不断迈进,钟爱分离优于封装、晚绑定优于早绑定这一理念。这导致了两个很有趣的问题。

第一个就是术语的问题。考虑最初的 Smalltalk MVC 模式,视图与控制器不仅紧密耦合在一起,而且通常会成对出现。微软的大部分框架都是这样的,包括经典的 VB、WinForms、WebForms、WPF 以及 Silverlight,他们都使用了代码隐藏文件来存放控制器逻辑。但目前所说的“MVC”通常指的是视图与控制器是松耦合的框架。对于 Web 框架来说更是如此,HTML 的表单提交机制允许任何视图提交到任何的控制器上。由于这篇文章主要谈论的是 Web 技术,因此我们需要使用现代化的定义。

第二个问题是“如果你是微软,该如何变换轨道而不给开发者造成太大压力”?到目前为止,这个问题的答案是:每年都发布新版本,直到开发者适应为止。ASP.NET MVC 的首个产品于去年 3 月发布。今年 3 月发布了 ASP.NET MVC 2.0。3.0 目前处于 RC 2 阶段,预计将于明年 3 月正式发布。

12 月 10 日,微软发布了ASP.NET MVC 3.0 Release Candidate 2 。RC 2 构建在微软对jQuery 的承诺之上:在默认的项目模板中引入jQuery 1.4.4、jQuery Validation 1.7 以及jQuery UI。虽然人们认为微软将重点从服务器端控件转移开来是个玩笑,但引入 jQuery UI 则表明微软这次是动真格的了。

对于那些担心可扩展性的开发者来说,现在有很多优秀的控件可以替换掉会话状态。借助于SessionState 属性,你可以告诉控制器会话状态是只读的、读写的还是可完全忽略掉的。这对于单服务器的站点来说没什么,但如果一台服务器需要从另一台服务器获取会话状态,那么这种方式就可以提供很大的帮助了。

MVC 3 包含了 Razor 视图引擎。默认情况下,该引擎会编码 HTML 输出,这样我们就能轻松地在屏幕上输出原生文本了。即便没有 HTML 注入攻击的风险,未编码的文本也能轻松防止页面的渲染。

对于众多的 C#开发者来说到底什么才是最震撼的呢,那就是 MVC 3 针对控制器和视图而拥抱了动态类型。ViewBag 属性会公开一个动态对象,开发者可以在运行期于该对象之上添加属性。一般而言,它用于从控制器向视图发送非模式数据。Scott Guthrie 提供的示例包含了状态文本(比如说当前时间)以及用于组装列表框的条目。

请感兴趣的读者参加下面的 InfoQ 小调查。

查看英文原文: ASP.NET MVC 3 Embraces Dynamic Typing

2010-12-13 21:552690
用户头像

发布了 88 篇内容, 共 263.1 次阅读, 收获喜欢 8 次。

关注

评论

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

架构师训练营第二周总结

极客大学架构师训练营

重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」

小傅哥

设计模式 小傅哥 重构 代码优化

第二周总结

changtai

架构师训练营作业 --Week2

吴炳华

极客大学架构师训练营

【架构师第二周】总结

浪浪

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十二)编写测试-超时

编程道与术

Java 编程 TDD 单元测试 JUnit

架构师训练营-week2命题作业

J.Smile

极客大学架构师训练营

一款开源的Diffy自动化对比测试框架:超详细实战讲解

狂师

开源 测试 测试驱动开发实战营 自动化测试

[Redis源码阅读]redis持久化

老胡爱分享

数据库 redis 缓存 持久化

0616作业2

Geek_10

学习一下:我的学习之道

非著名程序员

学习 程序员 程序人生 提升认知

Libra教程之:来了,你最爱的Move语言

程序那些事

比特币 区块链 以太坊 libra blockchain

【架构师训练营】第2周总结

花生无翼

极客大学架构师训练营

如何高效开会?

石云升

高效工作 时间管理 高效 开会

依赖倒置原则理解

Thrine

面向对象设计原则

陈皮

第二周作业

大雄

依赖倒置

「架构师训练营」第2周作业 - 设计原则

guoguo 👻

极客大学架构师训练营

Redis系列之扫盲篇(一)

z小赵

Java 分布式 高并发系统设计

Libra教程之:Libra testnet使用指南

程序那些事

比特币 区块链 以太坊 libra blockchain

基于 Docker 实现 MySQL 主从复制

ytao

MySQL Dockerfile

架构师训练营-第二周-作业1

狂奔嘀兔纸

极客大学架构师训练营

BAT面试题汇总:分布式+Dubbo +JVM+微服务+多线程+Spring附答案(建议收藏)

程序员生活志

Java spring 面试 分布式 mybatis

「架构师训练营」第 2周作业

旭东(Frank)

架构 极客大学架构师训练营

Libra教程之:运行自定义move modules

程序那些事

比特币 区块链 以太坊 libra blockchain

为什么 Vue 更符合这个时代的大势所趋

葡萄城技术团队

Vue SpreadJS

程序员开发色情游戏,赴日寻找AV女优真人拍摄,结果...

程序员生活志

程序员 游戏开发

2020年6月17日 MySQL基准测试

瑞克与莫迪

架构师训练营第二周总结:软件开发简史和框架设计的方法

hifly

设计模式 极客大学架构师训练营

Spring BeanPostProcessor 你不能不知道的事

CoderLi

Java spring 程序员 源码分析 后端

听说你 ping 用的很 6 ?给我图解一下 ping 的工作原理

小林coding

面试 计算机网络 计算机基础

ASP.NET MVC 3拥抱动态类型_.NET_Jonathan Allen_InfoQ精选文章