《圣殿祭司的ASP.NET4.0专家技术手册》----1-1 ASP.NET平台的三分天下

简介: 圣殿祭司的ASP.NET4.0专家技术手册 如果访问微软www.asp.net网站,会发现ASP.NET技术目前有3位成员:Web Form、MVC和Web Pages,如图1-1所示。它们各有不同的定位与特色,彼此的开发方式也不相同。

本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第1章,第1节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

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开发工具预定的网页开发技术,它走更易于使用的开发路线。


c54e04bfc50efb5200db1bc3cfb177c61c355760

你心里可能有疑问:“为什么微软要将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则表示业务逻辑与数据处理。


62dda450b7e20d983314f7d0527c87354ebe35f9

然而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所示。


5f008ff5997179793e6d38e83987f92f5aa1b6fc

http://www.asp.net/web-pages
执行Web Matrix开发工具,例如,选择【模板】→【照片库】,如图1-4所示,然后Web Matrix会建立一个网页电子相簿的模板网站,供你使用或修改。而每个Web Page的扩展名是.cshtml(Web Matrix目前只支持C#语言),并使用Razor语法,如图1-5所示。


107e99373e8d6f48997390c2b6ace95d48c2bfea

但深入介绍Web Matrix及Web Pages不是本书重点,故以下仅以一个范例让各位体验Web Pages及Razor语法的应用。


1080b7c5bfc8a6d9db3d8bb7b2107978c58bfda1

范例1-1 在ASP.NET项目使用Web Page及Razor语法
ASP.NET 4.0项目也能使用Web Page及Razor语法,请参考WebPage.cshtml程序,具体步骤如下。

F:20100708-Nancy-AEL010800ICONSTEP01.tif加入Web Pages页面

在ASP.NET项目中加入一个网页(Razor)页面,命名为“WebPage.cshtml”,如图1-6所示。

image

F:20100708-Nancy-AEL010800ICONSTEP02.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所示。


79d876eb073b84d519ae85cd32cc7f41470738c9

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
68 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
6月前
|
存储 开发框架 前端开发
asp.net与asp.net优缺点及示例
asp.net与asp.net优缺点及示例
|
23天前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
26 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
30天前
深入.net平台的分层开发
深入.net平台的分层开发
47 0
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
60 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
2月前
|
开发框架 前端开发 .NET
ASP.NET云LIS区域检验云SaaS平台源码
云LIS区域检验平台由BS架构组成。统一接入区域内全部的检验数据,通过检验云,实现区域内检验信息数据共享,通过区域质控模块,对各个分支机构产生的报告进行质控,从而实现检验结果互认。同时,对各医疗机构上传的样本检验数据进行统一管理。
45 1
ASP.NET云LIS区域检验云SaaS平台源码
|
3月前
|
开发框架 安全 搜索推荐
分享105个NET源码ASP源码,总有一款适合您
分享105个NET源码ASP源码,总有一款适合您
27 4