1-1 ASP.NET平台的三分天下
圣殿祭司的ASP.NET4.0专家技术手册
如果访问微软www.asp.net网站,会发现ASP.NET技术目前有3位成员:Web Form、MVC和Web Pages,如图1-1所示。它们各有不同的定位与特色,彼此的开发方式也不相同。目前,使用人数与市场占有率最高的仍是Web Form,而MVC近两年有不少技术玩家和项目采用,至于Web Pages,则是另外的Web Matrix开发工具预定的网页开发技术,它走更易于使用的开发路线。
你心里可能有疑问:“为什么微软要将ASP.NET分成3块,如何选择与适从?”这是一个很好的问题。下面,先简单介绍这几种技术的由来。
(1)ASP.NET最早的成功是基于ASP.NET Web Form的,它是使用Web Form + 一堆好用的控件 + Code-Behind模式的Managed Code + 易学易用。这使得ASP.NET迅速攻占全球市场,甚至成为企业开发主力。
(2)后来推出ASP.NET MVC是因为JSP或PHP使用MVC模式已行之多年,但微软长久以来一直欠缺MVC Framework这块,故多年后终于发展出自己的ASP.NET MVC 1.0,目前正式版是ASP.NET MVC 4.0,以满足ASP.NET开发人员多年期盼的MVC框架。
(3)至于Web Matrix和Web Pages的开发,算是另一种简化与尝试,适合那些觉得传统ASP.NET开发还是太难的人员。这会让他们得到较为简单的工具与开发模式。
1-1-1 多元或纷乱的局面
虽说不同的技术是为了满足不同喜好的人,但毕竟会形成多元或纷乱的局面(许多事之间往往只有一线之隔),这种事很难事先逆料,必须视后续发展才能概括论定。例如,有的ASP.NET MVC用户,会有种莫名优势感,宣称MVC才是王道,Web Form发展不下去的言论。但事实上,这些都不代表微软态度与立场,官方一直以来的立场是:“多一个选择!”以此满足不同的开发者,而不是扶植谁或消灭谁,所以,应以中庸之道观之,以平等心去看待多元的技术,就不会为此感到烦恼。
本书通篇是以Web Form技术为主,而以下会约略介绍MVC与Web Pages技术,以满足读者的求知欲。MVC这篇是笔者为微软台湾MSDN电子报所写的一篇专栏,以美国总部ASP.NET的RD团队观点来陈述ASP.NET MVC的技术定位。
1-1-2 ASP.NET MVC技术定位与抉择
在2009年4月,微软正式推出了ASP.NET MVC Framework,它是一个以MVC设计模式为理念的网页开发技术,MVC是“Model-View-Controller”3个单词前缀的缩写。这个设计模式的主要精神,在于将Web应用程序,依其特性区分为3大类功能块,View是表示层UI接口;Controller则是负责用户与系统之间的互动,如图1-2所示。例如,Input及Output都是由Controller统筹,最后Model则表示业务逻辑与数据处理。
然而MVC设计模式并不是什么新的概念,也不是什么新的创举,它是由Trygve Reenskaug于1978年所提出,当初是为了“缩小人类精神面Mental Model与数字系统Digital Model间的鸿沟”这个议题,企图通过MVC功能性的分层归类,而达到一个较好的系统设计与互动模型。MVC设计模式从首次提出到现在,已超过30年以上,在计算机科学的领域中,可谓是前辈级的技术。它对今日Web开发技术有着极为深远的影响,处处都可以看到MVC设计模式的影子,实现或提供MVC Framework的解决方案不计其数,例如,在Java领域有Struts、Tapestry与Spring等17种;PHP领域有Zend Framework、Zoop Framework等40种;Ruby领域有Ruby on Rails与Merb等7种,其余在ColdFusion、Flex、Python领域亦是不胜枚举。
在每种主流语言领域,都有MVC Framework解决方案,故微软自是不能缺席,于是也推出了ASP.NET MVC Framework解决方案,企图满足不同程序员及项目开发需求。但对于ASP.NET MVC的诞生,全球ASP.NET程序员第一个反应,多数人不是立即热烈拥抱或额首称庆,反而是一连串疑惑,担心现有的ASP.NET Web Form是否要改朝换代?或者是ASP.NET MVC将主导未来势力?现有的ASP.NET技术投资将白费?是否该全面转换到MVC的跑道?若要看透这种种的不安与疑惑,得从ASP.NET MVC的技术定位及特性来看,深入了解后,心中那团谜雾自会烟消云散。
微软对ASP.NET MVC Framework的定位是什么?答案很简单,就是“多一个选择!”并清楚指出,在未来,现有ASP.NET Web Form及控件技术的使用率仍会占多数,且会持续大力投资,没有任何改朝换代的计划;但对于喜欢MVC设计模式的企业级程序员,将会多一个选择,可以在MVC设计模式中获得他们想要的优点与元素,以更灵活的方式来面对不同项目开发需求。那你一定想知道,ASP.NET Web Form与ASP.NET MVC二者之间究竟有什么差异,有什么是现有Web Form及控件技术做不到的,或者说力犹未逮的,非得再另外推出一个ASP.NET MVC选择?以下说明ASP.NET MVC的优点与利益:
1.以MVC开发的Web在维护上较为容易
由于MVC天生采用模块化设计,故会自动隔离表示层、用户Input互动逻辑层、数据访问层之间的高度依赖性,变成松散耦合的系统设计,因此在系统后续的维护、升级与软件修正上,相对较为容易。
2.可完全掌控网页细部运作及高度定制化
由于ASP.NET MVC的网页设计,不依赖传统的ASP.NET控件,强调inline Code的Markup精神,以及Controller及Model的种种自定义,所以可以对网页细部运作有更强的掌控力,以及深入定制化的能力。
3.ASP.NET MVC可整合运用ASP.NET核心功能
虽然ASP.NET MVC不依赖传统的ASP.NET控件,但不意味着全然放弃原本ASP.NET基础架构,因为它仍然可使用原本ASP.NET诸多核心功能,例如,Forms authentication、Windows authentication、URL authorization、Membership、Roles、Output与Data Caching、Session与Profile State Management、Health Monitoring、Configuration System及Provider Architecture,所以使用ASP.NET MVC技术,依然要使用熟悉的ASP.NET技能。
4.MVC设计模式有助于增进团队协同开发
由于MVC本身就是分层设计的思维,因此,很适合多人同时进行的团队开发工作,例如,可以将View表示层部分交由Designer设计人员,而Model及Controller则交由多个程序员来进行,让团队协同开发工作可以同步进行,功能模块也更容易切割,交由不同人来开发。
5.MVC开发模式让测试驱动式开发式或单元测式变得容易
由于MVC的程序有明确的功能性区分,以及不依赖原有Web Form架构,因此,在程序测试的层面,你可以采用事后的单元测试,或者是事前的测试驱动开发(Test Driven Development,TDD),种种的测试工作在MVC的模式下,都会变得十分容易。
在初步了解ASP.NET MVC设计的优点之后,你一定会面临抉择上的问题,无论是学习或者实务运用上,希望能快速分辨二者的选用时机,以下是说明:
使用ASP.NET Web Form技术的时机。
如果你是属于以下几种情况的用户,建议继续采用ASP.NET Web Form的开发模式,因为这会比较符合你实际的需求与特性。
(1)快速建立网站与完成项目工作对你而言,其重要性远大于对网站技术细节的控制力。
(2)喜欢ASP.NET丰富控件所带来的快速构建能力,以及控件隐藏底层技术复杂度与抽象化运作,让你专注于工作的本身,而非繁琐的程序运行细节。
(3)对于Code-Behind程序写作的喜好,大过于inline Code,甚至是想尽量避免inline Code的写作模式。
(4)对于设计模式的开发模式不感兴趣,甚至是对MVC设计模式根本不熟悉,也不想了解太多。
使用ASP.NET MVC技术的时机。
如果你符合以下几种特质,那ASP.NET MVC将会十分适合你的需求。
(1)希望通过Markup程序的编写,取得网页运作的完全控制力,甚至不惜多花费一些额外力气与时间来完成MVC设计模式的工作。
(2)不喜欢ASP.NET控件的底层抽象化运行,喜欢透明及全面性的掌控力。
(3)不介意inline Code程序编写风格。
(4)喜欢设计模式的程序开发模式,特别是对MVC明确功能性分层的设计模式有着高度偏好。
(5)期望日后应用程序有较佳的维护性与升级性。
(6)希望程序可以有较好的测试性,或者是让测试过程变得简单与顺利。
最后总结,ASP.NET MVC带来了新的选择性,打破从前ASP.NET Web Form独占的局面,让企业或程序员可以在两种模式中取舍,而非取代彼此,因此,喜欢原有ASP.NET Web Form的人,可以继续保有原本技能,而想要MVC独特利益的人,可以尝试新的设计手法,二者可视时机交互选择运用,完全不相冲突,最重要的是,在未来ASP.NET世代,二者都会被重视,持续做功能性的改良与进化,将ASP.NET最好的功能面呈现给各位!
1-1-3 Web Matrix与Web Pages
Web Matrix是一套免费、轻量级、易于使用的网站开发工具,它内建IIS Express、Web Framework及SQL Server Compact数据库。而Web Pages是Web Matrix默认采用的网页技术。Web Matrix不包含在Visual Studio中,而是另一套独立的开发工具,可在以下网址下载安装。安装后,其启动界面如图1-3所示。
http://www.asp.net/web-pages
执行Web Matrix开发工具,例如,选择【模板】→【照片库】,如图1-4所示,然后Web Matrix会建立一个网页电子相簿的模板网站,供你使用或修改。而每个Web Page的扩展名是.cshtml(Web Matrix目前只支持C#语言),并使用Razor语法,如图1-5所示。
但深入介绍Web Matrix及Web Pages不是本书重点,故以下仅以一个范例让各位体验Web Pages及Razor语法的应用。
范例1-1 在ASP.NET项目使用Web Page及Razor语法
ASP.NET 4.0项目也能使用Web Page及Razor语法,请参考WebPage.cshtml程序,具体步骤如下。
F:\20100708-Nancy-AEL010800\ICON\STEP01.tif加入Web Pages页面
在ASP.NET项目中加入一个网页(Razor)页面,命名为“WebPage.cshtml”,如图1-6所示。
F:\20100708-Nancy-AEL010800\ICON\STEP02.tif 以Razor语法编写Web Page网页
在Web Page中以Razor语法编写以下程序,用来显示变量及图片数据:
- 01 <!--声明Razor语法-->
02 <!--单行变量定义-->
03 @{ var Name="圣殿祭司" ;}
04 <!--多行变量定义-->
05 @{ var Mobile = "0955168888";
06 var Gender = true;
07 var Height = 180;
08 var Weight = 75;
09 var GenderInfo="";
10 if (Gender==true)
11 {
12 GenderInfo = "男性";
13 }
14 else
15 {
16 GenderInfo = "女性";
17 }
18
19 var ImageUrl = "https://public.bay.livefilestore.com/y1pXTIK0XPispFw39cSWlcUEg3TJ7UId72JRVa2
LjP8sbNw1iSJgjj8ZdFUkEMy_uXd74u3AwXlDgkuXZH_OQ/Naruto.png?psid=1";
}
21
22 <!DOCTYPE html>
23 <html>
24 <head>
25 <title>Razor语法</title>
26 </head>
27 <body>
28 <!--显示个人资料--->
29 <h2>Web Pages的Razor语法应用</h2>
30 Hello @Name ! 今年是 @DateTime.Now.Year 年,你的个人资料如下:<br />
31 <ul>
32 <li>手机:@Mobile </li>
33 <li>性别:@GenderInfo </li>
34 <li>身高:@Height </li>
35 <li>体重:@Weight </li>
36 </ul>
37 <img src="@ImageUrl" alt="" />
38 </body>
39 </html>
程序说明
程序中以@开头的是变量,在执行时就会替换成实际数值。
程序的执行结果如图1-7所示。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。