且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《精通 ASP.NET MVC 4》----1.3 ASP.NET MVC的关键优点

更新时间:2022-10-13 10:02:24

本节书摘来自异步社区《精通 ASP.NET MVC 4》一书中的第1章,第1.3节,作者: 【美】Adam Freeman ,译者: 李萍 , 徐燕萍 , 林逸 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 ASP.NET MVC的关键优点

精通 ASP.NET MVC 4
ASP.NET已经获得了巨大的商业成功,但正如所讨论的,其他Web开发领域也在进步,即使是微软也在不断清理Web Form的垢病,因为其基本设计看上去已经相当陈旧了。

2007年10月,在德克萨斯-奥斯汀举行的第一次ALT.NET国际会议上,微软副总裁ScottGuthrie宣布并演示了崭新的MVC Web开发平台,它建立在核心ASP.NET平台之上,明确地作出对Rails等技术进展的直接回应,以及对Web Form批评的反应。以下小节将描述这个新平台如何克服Web Form的局限性,并把ASP.NET重新带回到先进行列。

1.3.1 MVC的体系结构

区别MVC体系结构模式与ASP.NET MVC框架非常重要。MVC模式并不新——这要回溯到1978年Xerox PARC的Smalltalk项目——但它作为一种Web应用程序的模式,如今已得到了广泛的普及,原因如下。

用户与MVC应用程序的交互遵循一种自然的循环:用户采取一个动作,应用程序对其作出响应,修改其数据模型,并把一个更新的视图提供给该用户,然后重复这一循环。这非常适合于以一系列HTTP请求与响应进行传递的Web应用程序。

Web应用程序必须组合多种技术(如数据库、HTML、可执行代码等),这通常被分成一系列层次。这种组合所产生的设计模式能够自然地映射到MVC的概念上。

ASP.NET MVC框架实现了这种MVC模式,而且在实现过程中还极大地改善了关注分离。事实上,ASP.NET MVC实现了MVC模式的现代化变异,使它特别适用于Web应用程序。读者将在第3章更多地了解这种体系结构的理论与做法。

通过采纳和调整MVC模式,ASP.NET MVC框架对Roby on Rails以及类似平台形成了强有力的竞争,并把MVC模式带到了.NET世界的主流。利用开发人员使用其他平台的经验和***实践,ASP.NET MVC在许多方面的推进甚至已经超越了Rails。

1.3.2 可扩展性

桌面电脑的内部组件是一个个独立的部件,它们只通过标准的公共文档接口进行交互。人们可以很容易地拔出显卡或硬盘,并用另一制造商的产品来替换,相信它会在插槽中正常工作。MVC框架也被构建成一系列独立的组件——满足一个.NET接口,或建立在一个抽象类之上。因此,开发者可以很容易地用一个自己的不同实现来替换相应组件,如:替换路由系统、视图引擎、控制器工厂等。

ASP.NET MVC设计者对每一个MVC框架组件都提供了3种选择。

使用组件现行的默认实现(它应该足以满足大多数应用程序)。

派生默认实现的一个子类,以调整其行为。

用接口或抽象基类的一个新实现来完全替换该组件。

这就像自ASP.NET 2.0开始的提供器模型一样,而且还向前跨了一大步——深入到了MVC框架的核心部分。从第12章开始,读者将了解所有这些各种各样的组件,以及如何和为什么要调整或替换这些组件。

1.3.3 在HTML及HTTP上的严密控制

ASP.NET MVC认识到,产生整洁、与标准兼容的标记的重要性。其内建的HTML辅助器方法可以产生与标准兼容的输出,但与Web Form相比,还有一种更重要的理念上的变革。MVC框架鼓励使用构思简单、优雅、可设置CSS样式的标记,而不是生成大片难以控制的HTML标记。

当然,如果用户确实想将一些现成的部件用于复杂的UI元素,如日期选择器或级联菜单等,ASP.NET MVC的“无特殊需求”标记方法可以很容易地使用***品种的UI库,如jQuery库或Yahoo UI库等。微软已经将jQuery装配为默认的ASP.NET MVC项目模板的一个内建部件,ASP.NET MVC与流行的jQuery库啮合得如此良好,甚至能够直接引用微软的内容分发网络(CDN,Content Delivery Network)服务器上的jQuery.js文件。JavaScript开发者们如果了解到这些,一定会感到非常开心。

ASP.NET MVC生成的页面不含任何视图状态数据,因此,这些网页可能比典型的ASP.NET Web Form页面要小几百KB。无论今天的高速宽带如何,这种对带宽的节约仍然极大地改善了最终用户的体验。

与Ruby on Rails一样,ASP.NET MVC与HTTP工作得十分协调。用户对传递于浏览器与服务器之间的请求有完全的控制,因此只要用户愿意,就可以仔细地调整用户体验。AJAX很容易使用,而且没有任何自动回发来扰乱客户端状态。任何一个专注于Web的开发人员都会觉得这是极大的解放,且让人工作时心情愉快。

1.3.4 可测试性

MVC体系结构为用户提供了很棒的起点,以使应用程序可维护和可测试,因为用户可以自然地把应用程序的不同关注分成不同的、独立的软件片段。ASP.NET MVC的设计者们还不止做了这些。为了支持单元测试,他们对该框架采取了面向组件的设计,并确保把每个独立的片段构造成满足单元测试和模仿工具的需求。

添加了Visual Studio向导,让用户创建初步的单元测试项目,该项目集成了开源的单元测试工具,如NUnit和xUnit,以及微软自己的MSTest。即使以前从未编写过单元测试的人,也会有一个很好的开始。

读者将会在本书中看到,如何为ASP.NET MVC的控制器以及动作编写整洁、简单的单元测试示例。这些单元测试使用各种测试和模仿策略,提供对框架组件的伪造或模仿实现来模拟各种情景。

可测试性并不仅仅是单元测试的事情。ASP.NET MVC应用程序也可以与UI自动化测试工具良好协作。用户可以编写模拟用户交互的脚本,而不必猜测框架会生成什么样的HTML元素结构、什么样的CSS的class,或什么样的ID等,也不必担忧这种结构的意外变化。

1.3.5 强大的路由系统

随着Web应用程序技术的改进,URL的样式也已经发生了演变,如下面所示的URL。

/App_v2/User/Page.aspx?action=show%20prop&prop_id=82742
这种URL已经明显很少见到了,取而代之的是一种更简单、更清晰的格式,如下所示。

/to-rent/chicago/2303-silver-street
采用这种URL结构有一些很好的理由。首先,搜索引擎对URL中找到的关键词有明显的权重。一个对“芝加哥租房”的搜索,更可能找到的是一个较简单的URL。其次,许多Web用户现在对URL有了足够的领悟,并且乐于直接在浏览器的地址栏中输入。再次,当理解了URL的结构时,人们才会更可能链接它,与朋友共享它,或在电话中报读它。最后,这种URL并不会把应用程序的技术细节、文件夹、文件名结构暴露给整个公用网,因此,人们可以***地修改底层实现而不会破坏输入链接。

整洁的URL在早期的框架中难以实现,但ASP.NET MVC会默认使用System.Web.Routing工具给出整洁的URL。这让用户能够完全控制URL方案及其与应用程序的关系,使用户能***地创建对用户有意义和有用的URL模式,而无须遵守预定义模式。当然,这也意味着,如果用户愿意,可以很容易地定义现代REST风格的URL方案。读者将在第13章和第14章了解路由的整个处理和URL的***做法。

1.3.6 建立在ASP.NET平台的精华之上

微软当前的ASP.NET平台为开发高效的Web应用程序提供了一系列成熟的、经充分验证的组件和工具集。

首先,也是最明显的,由于ASP.NET MVC是基于.NET平台的,因此可以灵活地使用任何.NET语言来编写代码,并访问同样的API特性——不仅仅是MVC本身的特性,而是广泛的.NET类库和大量的第三方.NET类库体系。

其次,已形成的ASP.NET平台特性,如母版页(Master Page)、表单认证(Forms Authentication)、成员(Membership)、角色(Roles)、简档(Profiles),以及国际化(Internationalization)等,可以减少开发和维护Web应用程序所需的代码量。而且这些特性在MVC框架中的使用同在经典的Web Form项目中的使用一样有效。用户可以在ASP.NET MVC应用程序中重用Web Form内建的服务器控件,以及早期的ASP.NET项目中的自定义控件(只要它们不依赖于Web Form的专有概念,如视图状态)。

1.3.7 现代API

自2002年初以来,微软的.NET平台经过了不懈的演变,现在,在许多方面的支持甚至定义了达到最新技术发展水平的现代编程。

ASP.NET MVC 4是针对.NET 4.5而建立的,因此它的API可以充分利用最新语言和运行时的创新,包括await关键字、扩展方法、lambda表达式、匿名及动态类型,以及语言集成查询(LINQ)等。许多MVC框架的API方法和编码模式与早期平台相比,遵循了一种更清晰、更富表现力的写作方式。

1.3.8 ASP.NET MVC是开源的

与之前的微软Web开发平台不同,现在人们可以***地下载ASP.NET MVC的源代码,甚至修改和编译自己的版本。在调试跟踪深入到系统组件,以及想步入其代码内部(甚至读取原程序员的注释)时,这种开源都是无价的。如果正在建立高级组件,并想看看有什么(可进一步)开发的可能性,或者想了解内建组件如何工作等情况时,这种开源也是很有用的。

此外,如果不喜欢框架的某些工作方式,或发现了一个bug,或者想访问一些不能访问的东西,这种开源简直太好了,因为人们可以自己作一些简单修改。然而,需要对这些修改保持跟踪,并且在更新到框架的新版本时,把它们重新运用起来。ASP.NET MVC开源工作在微软公共许可(Ms-PL,Microsoft Public License)之下(www.opensource.org/licenses/ms-pl.html),这是一个开放源代码倡议(OSI,Open Source Initiative)核准的开源许可协议。意思是,你可以修改源码、部署它,甚至把你的修改公开作为派生项目重新分发。读者可以从http://aspnet.codeplex.com/网站上下载MVC源代码。

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