BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

ASP.NET MVC 2 Preview 1 发布

| 作者 赵劼 关注 4 他的粉丝 发布于 2009年8月1日. 估计阅读时间: 5 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

ASP.NET MVC是既ASP.NET WebForms之后,微软推出的Front Controller式的Web开发模型,它弥补了前者对HTML控制能力不足,单元测试较为困难等缺点。更重要的是,ASP.NET MVC基于MS-PL发布,是一个真正的开源框架——且没有任何平台限制,也就是说,您可以在mono下使用或开发ASP.NET MVC的相关项目。

其实微软在今年3月的MIX大会上发布ASP.NET MVC RTM的时候,就已经公布了部分ASP.NET MVC 2的计划,并且在官方代码源中包含的MvcFutures项目中实现了V2的部分功能雏形。在沉寂了4个多月之后,现在微软终于发布了ASP.NET MVC 2的Preview 1版本,并在论坛中向社区征求反馈意见和建议。令人放心的是,ASP.NET MVC 2 Preview 1能够与ASP.NET MVC 1.0 RTM共存,不会影响后者的正常使用。

Scott Guthrie一如既往地在第一时间内撰写博文,详细而又简单地介绍了Preview 1中的新特性。ASP.NET MVC 2的“主题”是“提高生产力”,Preview 1的主要功能有:

  • 区域(Area):Area提供了将Controller和View分组的功能,这个特性可以构建一个大型应用程序中相互独立的部分。每个Area可以独立放在不同的ASP.NET MVC项目中,并且由主应用程序共同引用。这个特性可用于应对大型应用程序所带来的复杂性,也使多个团队能够更方便地同时开发同一个应用程序。
  • 数据标记验证(Data Annotation Validation):ASP.NET MVC 2提供了内置的数据标记验证功能。这个功能利用了.NET 3.5 SP1中加入的自定义属性(Required,StringLength,Range,RegularExpression等),并且已经运用在ASP.NET Dynamic Data框架与.NET RIA Services中。利用这一功能,开发人员可以为Model或ViewModel添加验证规则,ASP.NET MVC框架则会自动进行数据绑定或UI验证。
  • 强类型UI辅助方法:ASP.NET MVC V2包含了新的HTML UI辅助方法,它利用了强类型的Lambda表达式来操作View模板的Model对象。这样在编写视图代码时便可以充分获得IDE的智能提示。更重要的是,它为视图带来更好的编译期检验能力。
  • 模板化辅助方法(Templated Helper):这一功能可以根据数据类型自动选择相关的模板。例如,在视图中生成一个System.DateTime输入功能时,将会运用一个日期选择器模板。这与ASP.NET Dynamic Data框架中的Field Template有些接近,不过Preview 1中的模板化辅助方法是专为ASP.NET MVC框架而设计的。

此外,微软还公布了ASP.NET MVC 2的路线图。除了Preview 1中已经公开的内容之外,Preview 2中会包括以下功能:

  • 客户端验证:在Preview 1中模板化辅助方法及数据标记验证功能的基础上,构建一个客户端验证功能。
  • 强类型输入(input)辅助方法:使用强类型的表达式构建出针对Model的输入元素。这些辅助方法还会利用数据标记验证功能来减少错误(如拼写错误)。
  • 强类型链接(link)辅助方法:在IDE智能提示的辅助下,使用强类型的表达式来生成面向特定Controller和Action的链接。
  • 异步Action:提供开发不阻塞线程的Action的方法,这可以显著提升站点的伸缩性,尤其是在需要访问外部资源的情况下。
  • 区域(Area)功能增强:可以在同一个项目中更好地组织应用程序,而不必分拆成多个项目。
  • 其他改进:继续修复ASP.NET MVC 1.0及ASP.NET MVC 2 Preview 1中已知的问题,并根据用户反馈进行API增强,以及一些细微的新功能。

除了Scott Guthrie之外,Scott Hanselman以及ASP.NET MVC团队的Phil Haack也在博客中介绍了ASP.NET MVC 2 Preview 1的情况,MSDNChannel 9还为“模板化辅助方法”这一重要功能提供了进一步的讲解和演示。更多消息请参考ASP.NET MVC 2 Preview 1的Release Notes,您还可以下载源代码对其进行深入了解。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

闻 ASP.NET MVC 2 Preview 1 发布 by Han Lemon

功能越来越强了.

re by q info

这篇文章比博客园的好

各有利弊吧 by 小 黑

可能老程序员会喜欢 但是对新程序员是否是好事儿呢

re by Li Taven

期待 MVC 2.0正式版的推出

MVC架构开发QQ群:23646988
主要以 ASP.NET MVC 和 PHP的MVC架构开发为主

有点像Rails了 by Liu Xiaosonl

有点像Rails了

Re: 有点像Rails了 by Jeffrey Zhao

和Rails感觉是两条路,不过生产力的目标是一致的。

ASP.NET正在返工 by 江天 皓月

MS不遗余力地开发MVC模型,是在根本上否决了ASP.NET FORM模型,这意味着FORM模型存在根本性的缺陷,MS正在推倒重来,而我们开发人员也要跟着折腾了。

Re: ASP.NET正在返工 by Jeffrey Zhao

我不同意你的观点。

1、WebForm已经非常成熟了,ASP.NET MVC是新东西。如果说MS不遗余力地开发MVC,那么微软也已经不遗余力地,使用数倍精力投入WebForm了。

2、WebForm不是没有改进,ASP.NET 4中对WebForm的增强也不是一点两点,尤其是对ViewState的控制上,目前微软是双管齐下的。

3、微软也并不是只在搞ASP.NET MVC,例如ASP.NET Dynamic Data框架呢?ASP.NET AJAX框架呢?微软都在不停的搞,并没有所谓的“抛弃”或“推倒重来”。

4、ASP.NET MVC的(默认)视图引擎是基于WebForm模型的,如果没有WebForms,开发ASP.NET MVC框架要耗费至少加倍的工作量。

Re: ASP.NET正在返工 by Jeffrey Zhao

再补充一句:无论是ASP.NET Routing还是ASP.NET MVC都是完全基于ASP.NET的基础架构,它们只是在ASP.NET的高楼大厦上面再多加一层,完全不是重造轮子。

ASP.NET MVC框架的构造,其性质和比如在Python,Java上构造多种web开发框架的性质是一样的,不是替代关系,各有各的市场。

Re: ASP.NET正在返工 by 江天 皓月

我很高兴能跟您有这样的讨论,如果说MS是一种权威,请允许我这个凡人做一种挑战。


在这里的大多数人都跟MS有着同呼息共命运的关系,我是,你也是。所以我们对MS的发展比普通人关心。


您的基本观点是MVC只是微软面向细分市场推出的技术。但是MS自己的说法是MVC改正了原先FORM模型的缺陷,如果说FORM模型的发展能够解决自身的缺陷那么就不存在“它(MVC)弥补了前者对HTML控制能力不足,单元测试较为困难等缺点”这样的说法了。


再如本文同样有“ASP.NET MVC 2的“主题”是“提高生产力””这样的话,言下之意FORM模型与之相较是生产力较低的选择。


当一种产品或技术对用户有着至深的影响时,它的开发商就要负有社会责任。我们希望MS能够慎重做出自己的产品计划,不要顾着推出那些“漂亮的技术”。

Re: ASP.NET正在返工 by Jeffrey Zhao

这个“提高生产力”是指ASP.NET MVC 2在ASP.NET MVC 1.0的基础上提高生产力(可以参考ASP.NET MVC 2 Road Map),因为的确社区反应ASP.NET MVC 1.0(相对于Rails等框架来说)的生产力还不足(而且就算是Rails总归可以更上一步的,Rails 3不也快发布了嘛)。微软从来也只说过两者的并存,从来没有说过替代关系(可参考ScottGu的文章,及Twitter消息,呵呵)。

WebForms的确有些缺点,例如对HTML控制能力不足(不过根据我的经验,这其实不是问题,因为ASP.NET MVC的View也是基于WebForms的,所以完全就是看如何在aspx里进行编程),对于单元测试较为困难(这也是相对的,在WebForms中可以使用MVP模式,也是很好的单元测试特性)。但是它相对于WebForms并非是完美的,这是两种开发模型。WebForm也有优点,例如高级控件级别功能的复用,快速开发能力,高度抽象的组件模型。ASP.NET WebForms兴起了一个控件产业,但是如Rails就不行,就是因为“模型”这个东西。

我的看法是,WebForms本身生产力是很好的,例如JSF也是模仿WebForms,Spring.NET的开发人员更是对WebForms推崇备至,只是在后来,如PHP,Java,Ruby,Python领域都提供了MVC形式的Web开发框架,它更符合敏捷的潮流,更容易单元测试,因此微软也在MVC领域下手了。当ASP.NET同时拥有两种开发模式时,开发人员就能根据情况灵活进行选择了,这才是最好的生产力(也是ASP.NET可以有更多市场的时候)。

例如,在我的项目中,在那些表单丰富,操作复杂的情况下(多为管理后台页面),WebForms中的复杂控件可以带来很大开发效率。在快速开发的时候使用WebForms(也就是不用MVP),单元测试较为困难的地方也只是asp.net页面上,但是页面上的逻辑很少的,业务逻辑都在BL层,而BL层的单元测试是充足的。而且,就算在使用MVC框架时,不是也避免Fat Controller吗?业务逻辑还是在BL层,而不是Controller中。

所以我的观点是,两种没有替代关系,各有各的市场。良好的实践也可以运用在WebForms中,即使有了ASP.NET MVC,WebForms还是一种非常成功的模型。

Re: ASP.NET正在返工 by Jeffrey Zhao

再举一个例子。

不知道您是否发现,其实现在这篇新闻中(除了“异步Action”)的大部分条目,都是和MVC框架本身没有必然联系的吗?

MVC框架的形式是M-V-C,但是现在的改进,基本上都是在视图,也就是WebForms中的aspx上做文章的。

试想,你是否可以在WebForms的基础上,根据Data Annotation自动生成客户端验证脚本?是否可以使用Templated helper的方式,为System.DateTime类型自动生成一个Date Picker呢?

答案都是肯定的。所以说,现在微软在设法提升的生产力,相当一部分也是不是mvc only的,它也可以for webforms(至少它的理念都可以for webforms)。

Re: ASP.NET正在返工 by 江天 皓月

技术的进步和产品的推陈出新本质上是件好事,但是也有Vista与Windows7的微软式营销。

各有所长 by Lee Bruce

不管是webform也好,还是mvc也好,其实都是有优缺点。MS只是为我们提供了更多的选择,用什么关键是看你自己的需要。个人觉得ASP.NET MVC不错,这是未来的趋势。当然并不代表webform就会被淘汰,它依然有自己适用的场合,正如VC中的MFC依旧保持着强盛的生命力。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

14 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT