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