background image

试很可能比实现一个使用

MVC 框架开发的应用程序的测试要复杂和艰难得多。而且,一个

传统型

ASP.NET 应用程序在测试时还需要使用一个 Web 服务器。相比之下,MVC 框架把组

件分离开来并且大量地使用接口,这使得有可能独立于框架的其他部分而较容易地单独测
试单个组件。

; V+ M' }; V6 I' d) u- x, M- e

此外,一个

MVC 应用程序的三个主要组件之间的松耦合特征还推动了平行开发。例如,一

名开发人员可以开发视图,而另一名开发人员则在开发控制器逻辑,第三名程序员则可以
专注于模型部分的业务逻辑的开发。

% A+ y) \2 {  j

<!--[if !supportLists]-->二、<!--[endif]-->基于 MVC 框架 Web 应用程序的优点
归纳来看,

ASP.NET MVC 框架主要提供了下列优点:

<!--[if !supportLists]--><!--[endif]-->通过把一个应用程序分离成相互独立的模型、视

图和控制器三部分而进一步提高了应用程序复杂性的管理。

<!--[if !supportLists]-->& [4 _- b7 j2 }% L" t9 r7 y 不再使用视图状态或基于服务器的

表单技术。这使得

MVC 框架特别有利于想全面控制一个应用程序的行为的开发人员。

<!--[if !supportLists]-->使用一种前端控制器(Front Controller)模式并通过单一的

控制器来处理

Web 应用程序请求。这一特征使你有可能设计出一个支持极其丰富的路由

基础结构的应用程序。有关于前端控制器的更多的信息,请参考
http://go.microsoft.com/fwlink/?LinkId=106357。  v9 o8 Q; k# ^* G' g2 a+ N: N

<!--[if !supportLists]-->& e8 K7 z5 V# p0 \* k6 B<!--[endif]-->提供对于测试驱动开发

(TDD)的大力支持。9 G5 h  B  e) `2 C: d

<!--[if !supportLists]-->三、<!--[endif]-->基于 Web 表单 Web 应用程序的优点 6 ?! n/ S. ?' F) d9 
G0 V8 J8 d
传统型基于

Web 表单的框架能够提供下列优点:

<!--[if !supportLists]-->8 {4 E" k9 x6 K8 ~* Q 支持事件模型。此模型能够保留 HTTP

传输过程中的状态,而这十分有利于在线业务式

Web 应用程序的开发。基于 Web 表单

的应用程序提供大量的事件,所有这些事件都得到数以百计的服务器控件的支持。

7 q9 

z; m" Q: p/ f

<!--[if !supportLists]-->使用一种页面控制器(Page Controller)模式,此模式能够把

许多功能添加到单个的页面。有关于页面控制器的更多的信息,请参考
http://msdn.microsoft.com/zh-cn/library/ms978764.aspx。

<!--[if !supportLists]-->6 G; Y& A+ {) y5 x 使用视图状态或基于服务器的表单,这使

得状态信息管理更加容易。

<!--[if !supportLists]-->四、8 v" q! i4 P! E: |$ p% T0 h<!--[endif]-->ASP.NET MVC 框架特征 9 
B* @  i1 b& a/ h' ~
概括来看,

ASP.NET MVC 框架大致提供了下列重要特征:

<!--[if !supportLists]-->6 j$ r7 n0 @5 K9 _, ]: S% B1 e 实现应用程序基本任务(输入

逻辑,业务逻辑和

UI 逻辑)的分离,支持测试及测试驱动开发(TDD)。MVC 框架中

所有的核心契约都是基于接口的,因此十分利于使用

mock 对象(这是一些模拟应用程

序中实际对象的模拟对象)测试工程。你可以对应用程序进行单元测试而不必在真正的
ASP.NET 进程中运行控制器,这加快了单元测试的速度和灵活性。你可以使用与.NET
框架相兼容的任何单元测试框架测试你的工程。

/ t: D- \% O% g0 A& V( _- R

<!--[if !supportLists]-->提供了一个可扩展的和可插接的框架。ASP.NET MVC 框架组

件的设计支持用户十分容易地对它们进行替换或定制。你可以设计并加入你自己的视图
引擎,

URL 路由策略,行为方法参数串行化,以及其它组件。ASP.NET MVC 框架还支

持使用现有依赖性注入(即

“Dependency Injection”,简称“DI”)和控制反转(IOC)容