年月微软针对ASPNET 发布的MVC框架(Preview 版本)是一个真正意义上的ASPNET MVC框架至今短短个月内此框架已经发展到Preview 版本许多国内外业界人士称该框架为其前基于Web表单开发模式的历史性颠覆本文站在对ASPNET MVC框架与传统ASPNET Web表单开发模式进行简明理论对比的角度对ASPNET MVC框架的发展前景作出初步展望
一引言
一直以来软件架构师们在开发软件的方法及架构方面争论不休这样的一些典型的例子包括针对ORM与存储过程REST与SOAP结构的讨论等等最近一段时间在微软社区内又展开了一场有关ASPNET Web表单与ASPNET MVC框架的讨论许多人认为ASPNET MVC框架最后将会取代Web表单机制而也有一些人坚持认为ASPNET MVC框架未来不可能取代如今已经牢牢占据NET平台上ASPNET开发统治地拉的Web表单技术那么究竟ASPNET MVC框架是否会取代Webforms呢?
值得注意的是从一开始微软的众多权威人士都一致表示ASPNET MVC框架仅仅将作为Web表单方案的一种可能的替代方案而不会彻底取代它而Web表单也不可能取代ASPNET MVC因此真正的发展趋势将是ASPNET MVC与Web表单将共同存在ASPNET MVC决不会成为Web表单的取代者所以如果你比较喜欢ASPNET MVC你可以选择使用它而如果你感到Web表单更易于上手你也可以尽情地按照你的传统方式继续使用它也就是说两种途径都只是针对不同的选择不同的方法而已而提供给开发者不同的选择本身是一件好事仅此而已当然不同的选择也完全可以应用于其他的平台特别是另一块比较火的Java开发平台
二ASPNET Web表单方案存在的问题
ASPNET Web表单方案存在哪些方面的不足呢?Web表单的指导思想是把Windows桌面应用中的表单模型引入到Web应用程序的开发中这种模型很快就吸引了大批的传统Windows桌面应用开发程序员特别是以前的VB 程序员今天许多VB 开发者已经转到了ASPNET Web开发领域但是他们并没有基本的HTTP与Web基本知识为了模拟传统型Windows桌面应用程序中的表单开发体验Web表单引入了事件驱动的方法而且还引入了Viewstate和Postback等相关概念最终Web表单技术知彻底地攻克了Web中无状态特征这个难关随之而来的是Viewstate和Postback带来了大量的问题从而提高了Web应用程序开发的复杂性例如即使一些非常简单的Web页面也有可能产生大于KB尺寸的Viewstate这当然会在某些情况下严重影响系统的性能此外开发人员还无法控制Web表单生成的HTML而且ASPNET服务器控件生成的HTML既混杂有内联方式也包含不符合标准的过时的标签Web表单所带来的另一个问题是与JavaScript框架的集成比较困难这主要是因为生成的HTML的命名惯例所造成的此外Web表单相应的页面生命周期太复杂了在整个ASPNET框架中所有内容都是紧耦合型的并且仅使用一个类来负责显示输出和处理用户输入因而单元测试几乎是一项不可能的任务而我们都知道在现代软件开发中特别是当我们遵循敏捷软件方法论及相应惯例开发软件时单元测试是很重要的既然Web是无状态的那么Postbacks和Viewstate就不会完美的解决方案
三ASPNET MVC架构所具有的特征
ASPNET MVC架构能够简化ASPNET Web表单方案编程中存在的复杂部分但是在威力与灵活性方面将一点也不会逊色于后者ASPNET MVC架构要实现的在Web应用程序开发中引入模型视图控制器(即ModelViewController)UI模式此模式将有助于开发人员最大限度地以松耦合方式开发自己的程序MVC模式把应用程序分成三个部分—模型部分视图部分以及控制器部分其中视图部分负责生成应用程序的用户接口也就是说它仅仅是填充有自控制器部分传递而来的应用程序数据的HTML模板模型部分则负责实现应用程序的数据逻辑它所描述的是应用程序(它使用视图部分来生成相应的用户接口部分)的业务对象最后控制器部分对应一组处理函数由控制器来响应用户的输入与交互情况也就是说Web请求都将由控制器来处理控制器会决定使用哪些模型以及生成哪些视图正如读者所猜想到的MVC模型将使用其特定的控制器动作(Action)来代替Web表单事件因此使用MVC模型的主要优点在于它能够更清晰地分离关注点更便于进行单元测试从而能够更好地控制URL和HTML内容值得注意的是MVC模型不使用ViewstatePostback服务器控件以及基于服务器技术的表单因而能够使开发人员全面地控制视图部分所生成的HTML内容MVC模型使用了基于REST(Representational state transfer)的URL来取代Web表单模型中所使用的文件名扩展方法从而可以使我们构造出更为符合搜索引擎优化(SEO)标准的URL当前MVC仅仅支持Net框架版本因此如果你想要在Net框架下使用MVC的话我建议你访问一下Scott Hanselman的撰写的博客文章(Deploying ASPNET MVC on ASPNET )你会从中找到相应的答案
在本短文中我并不是展示一个具体的MVC示例应用程序(因为一个简单的示例剖析就会占去相当的篇幅)因此关于MVC框架的具体实例读者可以参考微软最权威专家Scott Guthrie的博客也可以参考我发表在IT中的几篇博文
(http://spaceitpubnet/?uidactionviewspaceitemid)
四结论
选择将根据不同的人而有所不同如果你想要更多控制HTML你想要进行测试驱动开发的话或者你更关注Web标准可访问性或者你想构建SEO友好的URL那么你可以选择MVC模型如果你想要实现对系统的更好的控制以及想实现面向状态的事件驱动的Web开发的话你可以选择Web表单模型如果你感到使用MVC更舒适些请选择这种模型好了而如果你感到使用Web表单模型更舒适些就应该毫不犹豫地选择使用Web表单模型两者仅仅是选择的不同如果你刚开始使用ASPNET Web表单踏上你的职业生涯而还没有对Web有一个全面的了解那么你一下转到MVC模型方面肯定存在不少的困难
较之于Web表单我更为喜欢MVC模型而且我感觉微软在今后更有可能朝着MVC作了更多的努力这种模型所具有的技术特征以及开源天性深深地吸引了我此外MVC模型还允许我全面地控制HTML并且支持测试驱动开发(TDD)还有在MVC模式下我们可以非常容易地集成进jQuery以及其他JavaScript开发框架借助于C# 中新引入的扩展方法我们自己可以构造功能强大的丰富的帮助类