写点什么

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

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

关注

评论

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

XEngine:深度学习模型推理优化

华为云开发者联盟

深度学习 模型推理 显存优化 计算优化 XEngine

跟着动画学Go数据结构之堆排序

宇宙之一粟

golang 数据结构 排序算法 Go 语言 12月日更

蓝格赛(中国)用TDengine落地聚合查询场景,效果如何?

TDengine

数据库 tdengine 后端

React进阶(十一):create-react-app脚手架关闭 eslint 提醒

No Silver Bullet

React 12月日更 creat-react-app

云图说|初识数据库和应用迁移UGO

华为云开发者联盟

数据库 华为云 UGO 异构迁移

​使用 Amazon Neptune 通过数据仓库构建知识图谱,借此补充商务智能体系

亚马逊云科技 (Amazon Web Services)

Data

内核干货不容错过,龙蜥内核的Load Averages剖析直播回顾上线了

OpenAnolis小助手

Linux Kenel 内核 龙蜥社区

dart系列之:手写Library,Library编写最佳实践

程序那些事

flutter dart 程序那些事 12月日更

「山东城商行联盟」数据库准实时数据采集系统上线,DataPipeline助力城市商业银行加快数字化转型

DataPipeline数见科技

数据库 中间件 数据同步 数据融合 数据管理

java开发之SSM开发框架

@零度

Java ssm

一个简单的单体服务流量标记demo

zuozewei

Java 性能测试 全链路压测 12月日更

元宇宙地产:品牌和投资者的大好机会?

devpoint

以太坊 NFT 元宇宙 12月日更

JDK ThreadPoolExecutor核心原理与实践

vivo互联网技术

jdk ThreadPoolExecutor Java 开发

又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖

腾讯云数据库

tdsql 国产数据库

利用极狐GitLab DevSecOps 功能检测 log4j 的多种方式

极狐GitLab

DM 分库分表 DDL “悲观协调” 模式介绍丨TiDB 工具分享

PingCAP

发布你的开源软件到 Ubuntu PPA

hedzr

#Ubuntu Debian packaging ppa

重装上阵——Graviton2提升Aurora性价比

亚马逊云科技 (Amazon Web Services)

Data

念叨了一年的游戏叙事书中文版终于出了!

博文视点Broadview

解析Redis操作五大数据类型常用命令

华为云开发者联盟

数据库 redis string 数据类型 getset

Go编译原理系列2(词法分析&语法分析基础)

书旅

Go 后端 编译原理

一文带你梳理Clang编译步骤及命令

华为云开发者联盟

编译 LLVM Clang编译 Clang 编译命令

webpack打包过程如何调试?

Jerry Wang

前端 前端开发 webpack 28天写作 12月日更

React进阶(十二):HOOK

No Silver Bullet

React Hooks 12月日更

一文详解TDSQL PG版Oracle兼容性实践

腾讯云数据库

tdsql 国产数据库

前沿干货!深度揭秘TDSQL新敏态引擎Online DDL技术原理

腾讯云数据库

tdsql 国产数据库

轻松驾驭EB级千万QPS集群,TDSQL新敏态引擎元数据管控与集群调度的演进之路

腾讯云数据库

tdsql 国产数据库

MySQL 中 blob 和 text 数据类型详解

Simon

MySQL

面试官:HashSet如何保证元素不重复?

王磊

如何将Amazon RDS与Amazon Aurora数据库迁移至Graviton2?

亚马逊云科技 (Amazon Web Services)

Data

synchronized源码分析之锁的膨胀

Ayue、

synchronized 锁机制 锁升级

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