1、MVC的组成
Views:显示数据,用户界面。在项目中体现为aspx页面,偶尔可以加上code-behind。
Controller:按路由规则将请求的数据传送给指定页面,用于显示;也可以把用户输入的数据传递给逻辑处理类。它可以包含简单的验证逻辑。不应包含数据访问逻辑。
2、为何使用MVC
提出MVC的目的无非是提高开发效率、提高可测试性。官方的ASP.NET MVC 1.0指南中指出(以下简称指南),基于MVC的Web应用程序有如下优点:
[1]对复杂的程序管理更方便
It makes it easier to manage complexity by dividing an application into the model, the view, and the ontroller.
[2]在开发上有更高的可控性
It does not use view state or server-based forms. This makes the MVC framework ideal for developers who want full control over the behavior of an application.
[3]Routing使软件设计有更多灵活性
It uses a Front Controller pattern that processes Web application requests through a single controller. This enables you to design an application that supports a rich routing infrastructure.
[4]更加适合测试驱动开发
It provides better support for test-driven development (TDD).
[5]团队开发项目中有更高的可控性
It works well for Web applications that are supported by large teams of developers and Web designers who need a high degree of control over the application behavior.
同时MVC框架还有以下特点:
[1]将应用程序分成各个组成部份,更有利于测试。MVC框架是基于接口的,这样可以利用MOCK方式来替换你的实际类;做单元测试的时候,也可以不运行Contrllers,这样的测试就更快更灵活。
[2]MVC框架是可扩展的,你可以自己设计并替换视频引擎、URL导向规则、Action的参数序列等等。同时MVC框架也支持依赖注入和控制反转,你可以从外部注入实例,而不用让类自己创建实例,你还可以通过配置文件的方式创建实例,这样使得测试更方便。
[3]强大的URL映射组件使得你的应用程序的URL更易理解,同时具备搜索能力。你的URL不必包括文件路径,这样的设计很适合自定义查询引擎和REST架构。
[4]MVC框架仍然支持ASP.NET中的页面、用户控件、母版页作为视图的模板;同时你也还可以使用嵌套母版页、行内表达式(in-line expressions)、服务器端控件、模板、数据绑定、本地化等等属于ASP.NET已有的东西。
[5]同时ASP.NET中的FORM验证、Windows验证、URL授权、Membership、角色、输出、数据缓存、Session、Profile 状态管理、配置、Provider框架等特性在MVC框架中仍然是可用的。
小结:ASP.NET MVC 1.0框架是基于ASP.NET的,所以他包括了ASP.NET中的几乎所有特性。同时他为设计人员提供了一套测试的方案(当然这是所有语言平台MVC模式的共性)。在安装了框架的VS2008中还增加了不少功能,可以方便地添加Views、Models、Controllers。
3、与三层结构的ASP.NET应用程序比较
与普通ASP.NET比较而言,最大的区别还是在于前台开发,后台包括的数据库访问、逻辑处理与以往的方式没有明显区别,在MVC框架中,这些统称为Model。而三层结构中,这些可以称为数据访问层与逻辑处理层。
[1]页面开发
用这种模式开发的站点,光看页面的代码的确比以往少一些,但它更多地使用了页面脚本()用于显示数据。在指南中并未提到不推荐使用服务器端控件,但是它提供了大量的HTML HELPER,而且还允许你自己添加Helper,比如DataGridHelper,所以在MVC框架中使用这些Helper会更方便些,不过这对于熟练工来说应该影响不大,因为实际开发中我们更多使用的是Ctrl+C/Ctrl+V,复制几个标签和复制几个Helper方法所花的时间差不多。可能对于新手来说,如果对标签不熟悉的话,用这些Helper的速度会快些,但是这样会影响新手掌握标签,真是矛盾呐。
[2]数据提交
普通的ASP.Net开发,在提交数据的时候可能还需要通过设置数据绑定,或者在code-behind里写封装代码;而在MVC中,框架自动帮助你将页面上填写的数据封装到事先指定的Model中,数据提交操作在MVC框架挺方便。而且在普通ASP.NET页面中,经常会出现某个属性无法绑回去的情况,这点在MVC中应该可以得到解决。指南中提到了Routing的使用使得MVC框架下的应用程序在操作自定义查询时变得更方便,实际上在查询方面跟普通方式并没有多大区别,都是对封装好的类进行解析。至于“URL更容易理解”,现在应用程序都是从界面上点击来实现操作,很少有人会关注URL本身吧,所以这个优点不算优点。
[3]单元测试
从测试上讲,MVC框架确实做得不错,若用MOCK方式测试可以更方便,一个好的WEB应用程序设计就应该将页面呈现与逻辑分开,这点普通ASP.NET应用程序也是可以做到的,关键在于设计。
[4]其它
MVC框架在验证、母版页这些地方有几个新特性,但与普通ASP.NET的方式大同小异,因此不仔细说了。