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

简介: 2007年10月,微软公司发布了一款新的MVC Web开发平台。它建立在核心ASP.NET平台之上,明确地形成了对Rails这类技术进展的直接响应,并作为对Web Form批评的一种反应。下面几小节将描述这一新平台如何克服Web Form的局限性,并将ASP.NET重新带回到先进行列。

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

1.3 ASP.NET MVC的关键优点

2007年10月,微软公司发布了一款新的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接口,或建立在一个抽象类之上。你可以很容易地用一个自己的不同实现来替换这些组件,例如,路由系统、视图引擎、控制器工厂等。通常,MVC框架对每一个组件提供了3种选择。

使用组件现行的默认实现(它应该足以满足大多数应用程序)。
派生默认实现的一个子类,以调整其行为。
用接口或抽象基类的一个新的实现来完全替换该组件。
从第14章开始,你将学习各种组件,以及如何和为什么要调整或替换这些组件。

1.3.3 HTML和HTTP上的严密控制

ASP.NET MVC会产生整洁与标准兼容的标记。其内置的HTML辅助器方法,可以产生与标准兼容的输出,但与Web Form相比,还有一种更重要的理念上的变革。MVC框架鼓励你制作可设置CSS样式的简单、优雅的标记,而不是让难以控制的HTML泛滥成灾。

当然,如果你确实想使用日期选择器或级联菜单等复杂UI元素的现成部件,ASP.NET MVC的“无特殊需求”标记方法可以很容易地使用最佳类型的UI库,如jQuery UI库或Bootstrap CSS库等。ASP.NET MVC与jQuery啮合得很好,微软公司已经在Visual Studio中随带了jQuery,将其用作默认ASP.NET MVC项目模板的一个内置部件,而且附带了Bootstrap、Knockout以及Modernizr等流行库。

提示:
本书不会介入这些值得赞美的JavaScript库的细节,因为它们不属于核心的MVC框架,而且都是在浏览器中完成其工作的。然而,MVC框架应用程序的客户端开发是一个重要论题,你可以在笔者的Pro ASP.NET MVC 5 Client一书中了解到更多内容,该书由Apress于2014年出版。不过,还有一些库对验证和Ajax请求等核心特性提供了支持,将在本书的第2部分加以描述。第27章描述Knockout,整本书中都会使用Bootstrap(虽然没有做详细介绍)。

ASP.NET MVC生成的页面不含任何View State(视图状态)数据,因此,这些页面可能比典型的ASP.NET Web Form页面更小些。无论当今的网络连接速度如何,这种对带宽的节约,仍然会极大地改善最终用户的体验,并且有助于降低公用Web应用程序的运行费用。

ASP.NET MVC与HTTP工作十分协调。你可以对浏览器和服务器之间传递的请求加以控制,因此,可以按自己的意愿仔细地调整用户的体验。AJAX很容易使用,而且没有任何自动回发扰乱客户端的状态。

1.3.4 可测试性

MVC体系结构在应用程序的可维护性和可测试性方面,提供了良好的开端,因为你可以很自然地将应用程序的不同关注分离成一个个独立的片段。ASP.NET MVC的设计者还不止做了这些。为了支持单元测试,他们对该框架采取了面向组件的设计,并确保所构造的每一个独立的片段,都满足单元测试和模仿工具的需求。他们还增加了Visual Studio向导,以便你根据需求创建单元测试项目。这种测试项目能与开源的单元测试工具(如NUnit和xUnit等),也能与包含在Visual Studio中的测试工具集成在一起,这些将在第6章加以介绍。即使从未编写过单元测试,也会有一个很好的开始。

在本书中将会看到如何为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
已经明显很少见到了。取而代之的是一种更简单、更清晰的格式,如下所示。

/to-rent/chicago/2303-silver-street
采用这种URL结构有一些很好的理由:第一,搜索引擎对URL中找到的关键词有明显的权重,一条“rent in Chicago(芝加哥租房)”的搜索,极有可能会转向一个较为简单的URL;第二,许多Web用户现在对URL有了足够的领悟,并且乐于直接在浏览器的地址栏中输入;第三,当理解URL的结构后,人们才会更有可能链接它,与朋友共享它;第四,这种URL并不会将应用程序的技术细节、文件夹、文件名称等结构暴露给公用网,因此,你可以自由地修改底层实现,而不会破坏输入链接。

整洁的URL在早期的框架中难以实现,但ASP.NET MVC使用一种叫作URL路由的特性,以提供默认的整洁路由。这让你能够完全控制URL方案及其与应用程序的关系,使你能自由地创建对用户有意义和有用的URL模式,而无须遵守预定义模式。当然,这也意味着如果你愿意,可以很容易地定义现代REST风格的URL方案。第15章和第16章可以找到URL路由的完整描述。

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

微软公司当前的ASP.NET平台为开发高效的Web应用程序,提供了一系列成熟的、经充分验证的组件和工具集。首先,最明显的,由于ASP.NET MVC是基于.NET平台的,因此可以灵活地使用任何.NET语言来编写代码,并访问同样的API特性——不仅仅是MVC本身的特性,而且是广泛的.NET类库和大量的第三方.NET类库体系。其次,已经形成的ASP.NET平台特性(如认证(Authentication)、成员(Membership)、角色(Roles)、配置文件(Profiles),以及国际化(Internationalization)等)可以减少你开发和维护Web应用程序所需的代码量。而且,这些特性在MVC框架中的使用,与在经典的Web Form项目中的使用同样有效。底层的ASP.NET平台提供了一套丰富的工具,可用于构建MVC框架的Web应用程序。

注:
本书中描述了许多最常用的ASP.NET平台特性,因为它们与MVC开发有关,但.NET平台有其自己的论题。ASP.NET平台提供的丰富的完整特性,可参考笔者的Pro ASP.NET MVC 5 Platform一书,该书由Apress于2014年出版。

1.3.7 现代API

微软公司的.NET平台随每次重要发布都在不断演变,支持,甚至定义了现代编程最先进的方向。ASP.NET MVC 5建立在.NET 4.5.1之上,因此,它的API可以充分利用当前语言和运行时的创新,包括await关键字、扩展方法、lambda表达式、匿名和动态类型,以及语言集成查询(LINQ)等。许多MVC框架的API方法和编码模式与早期平台相比,遵循了一种更整洁、更富表现力的写作方式。如果尚未跟上最新的C#语言特性,不用担心——第4章将提供MVC开发最重要的C#特性概要。

1.3.8 ASP.NET MVC是开源的

与之前的微软Web开发平台不同,现在可以自由地下载ASP.NET MVC的源代码,甚至修改和编译自己的版本。当你的调试跟踪已深入到系统组件并希望步入其代码内部(甚至阅读原程序员的注释)时,这种开源是无价的。如果你是在创建高级组件并希望了解进一步开发的可能性,或是想了解内置组件的工作机制等情况时,这种开源也是很有用的。

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

相关文章
|
测试技术 编译器 vr&ar
CMake深度解析:掌握add_custom_command,精通Makefile生成规则(一)
CMake深度解析:掌握add_custom_command,精通Makefile生成规则
1465 1
|
编解码 区块链 数据安全/隐私保护
格式工厂下载免费版,格式工厂电脑版下载,格式工厂官方下载
格式工厂是一款功能强大的多媒体格式转换工具,支持几乎所有类型视频、音频和图片格式的转换。视频可转为MP4、3GP、AVI等;音频可转为MP3、WMA、FLAC等;图片可转为JPG、PNG等。同时支持DVD/CD抓取、多媒体文件修复与压缩、GPU加速编码等功能,适配iPhone、PSP等多种设备。软件绿色免费,操作简便,是目前使用最广泛的格式转换工具之一。
721 3
|
人工智能 自然语言处理 搜索推荐
浪潮信息 Yuan-embedding-1.0 模型登顶MTEB榜单第一名
浪潮信息Yuan-Embedding-1.0模型在C-MTEB评测基准中荣获Retrieval任务第一名,推动中文语义向量技术发展
2790 7
浪潮信息 Yuan-embedding-1.0 模型登顶MTEB榜单第一名
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
机器学习/深度学习 算法 vr&ar
数学建模三大类模型适用场景及建模方法(纯干货)
如果评价指标个数过多(一般超过9个),利用层次分析法所得到的权重就有-定的偏差,继而组合评价模型的结果就不再可靠。可以根据评价对象的实际情况和特点,利用一定的方法,将各原始指标分层和归类,使得每易各类中的指标数少于9个。
5226 0
数学建模三大类模型适用场景及建模方法(纯干货)
|
机器学习/深度学习 数据挖掘 数据处理
强化学习在数据分析中的应用:使用Python制定决策策略
【4月更文挑战第12天】本文介绍了使用Python进行强化学习以制定数据分析决策策略的方法。强化学习是通过智能体与环境交互获取奖励来制定决策的技术。Python在强化学习中有丰富库支持(如TensorFlow、PyTorch、Keras)、强大的数据处理能力和丰富的生态系统。基本流程包括环境构建(使用OpenAI Gym)、模型选择(如神经网络)、策略选择(Q-Learning等)、训练模型及评估模型。
560 3
|
程序员
带你读《电路基础》之一:基本概念
本书内容采用简明易懂的风格,介绍了六步解决问题的方法,并在实践中的问题和实践问题,结合了超过468个新的或改变家庭作业问题。涵盖了全面的线性电路分析的方法,并保留了“设计一个问题”的功能,这有助于学生发展他们的设计技能,有学生发展的问题,以及解决方案。
|
消息中间件 存储 缓存
【面试问题】MQ 如何保证消息的顺序性?
【1月更文挑战第27天】【面试问题】MQ 如何保证消息的顺序性?
|
弹性计算 编解码 运维
第三讲《云上网络VPC&EIP&NAT&共享带宽&SLB》|学习笔记
快速学习第三讲《云上网络VPC&EIP&NAT&共享带宽&SLB》。
第三讲《云上网络VPC&EIP&NAT&共享带宽&SLB》|学习笔记
|
IDE Java Apache
commons-io如何添加和常见的用法
commons-io如何添加和常见的用法

热门文章

最新文章