0.ASP.NET MVC概述(纯文字可跳过)

  • 时间:2019-05-26
  • 作者:Charles
  • 热度:1718

ASP.NET MVC是微软的一个Web开发框架,它整合了“模型——视图——控制器(MVC)”架构的高效与整洁、敏捷开发最新的思想与技术以及当前的ASP.NET平台的精华部分。ASP.NET MVC可以完全替代传统的ASP.NET Web Form,除了一些微不足道的Web小项目之外,在各种Web项目开发项目中都具有明显的优势。

一:传统的ASP.NET Web Form

通过将用户界面(UI)模拟为服务器控件对象层的方法,微软试图利用Web Form把HTTP(具有无状态本质)和HTML都隐藏起来。每个控件在请求期间都跟踪自己的状态(通过使用View State工具),在需要时把自己渲染成HTML,并自动地将客户端事件(如按钮点击)与相应的服务器端的事件处理代码相关联。结果,Web Form 被设计成在Web上传递传统的事件驱动式图形用户界面(GUI)的一个巨大的抽象层。

其思想是,让Web开发在感觉上与Windows Form开发相同。开发者不需要再以一系列独立的HTTP请求和响应进行工作,可以认为它是一种状态化的UI,人们可以忘记Web及其无状态本质,转而用一种“拖——放”式设计器来创建UI,并设想——或至少假装——所有事情都发生在服务器上。

二:ASP.NET Web Form的问题

传统的ASP.NET Web Form开发曾是一种了不起的思想,但事实证明它更加复杂。随着时间的推移,Web Form在实际项目中显现出了一些缺陷。

1.视图状态重负:跨请求地维护状态的实际机制导致在客户端与服务器之间传输大块数据。这种数据即使在最适度的Web应用程序中也达到几百KB,而且它来回于每次请求之间,导致响应时间很慢,增加了相应服务器的带宽请求。

2.页面生命周期:连接客户端事件与服务器端事件处理器代码的机制(是页面的部分生命周期)格外复杂和棘手。很少有开发者在不产生View State错误或不发现某些事件处理器莫名失效的情况下,能够在程序运行时间成功地维护控件层。

3.关注分离的错误观念:ASP.NET的后台模型提供了一种手段,把应用程序代码从它的HTML标记中提取出来,并放到一个独立的后台代码类中。这种逻辑与表现的分离曾得到广泛的赞许,但事实上,却又鼓励开发者在这些怪异的后台代码类中,把表现代码(如操纵服务器控件树)与它们的应用程序逻辑(如维护数据库数据)混在一起。最终结果是脆弱和难以理解。

4.HTML上的受限控制:服务器控件将自己渲染成HTML,但并不是用户所希望的那种必要的HTML。在ASP.NET 4之前,这种HTML输出常不符合Web标准,或不能很好地使用CSS。而且,服务器控件会生成不可预知且复杂的ID标签属性值,这些ID难以利用Javascript进行访问。这些问题在ASP.NET 4和ASP.NET 4.5中改善不少,但要得到人们所希望的HTML,仍然是需要技巧的。

5.有缺陷的抽象:Web Form试图尽可能地隐去HTML和HTTP。当用户试图实现自定义行为时,市场需要放弃这种抽象,这迫使用户需要采取回发事件的逆向工程,或采取笨拙的方法,以使它生成所希望的HTML。这种抽象可能对有能力的开发者造成一个极大的障碍。

6.低可测试性:ASP.NET的设计者们恐怕未曾料到,自动测试会成为软件开发的主要成分。因此,他们设计的这种紧耦合体系结构不适合单元测试也不足为奇了。集成测试也很具有挑战性。

三:ASP.NET MVC的关键优点

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

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

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

ASP.NET MVC框架实现了这种MVC模式,并且在实现过程中还极大地改善了关注分离。

3.1 可扩展性

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

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

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

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

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

3.2在HTML及HTTP上的严密控制

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

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

ASP.NET MVC与HTTP工作得十分协调。用户对传递于浏览器与服务器之间得请求有完全得控制,因此只要用户愿意,就可以仔细地调整用户体验。

3.3可测试性

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

3.4强大的路由系统

整洁的URL在早期的框架中难以实现,ASP.NET MVC会默认使用System.Web.Routing工具给出整洁的URL。这让用户能够完全控制URL方案及其与应用系统的关系,使用户能够自由地创建对他有意义和有用的URL模式,而无需遵守预定义模式。

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

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

3.6 ASP.NET MVC是开源框架

可以自由下载ASP.NET MVC的源代码,甚至修改和编译自己的版本。在调试跟踪深入到系统组件,以及想步入其代码内部时,这种开源都是无价的。



博主声明

1、本博客主要为原创文章,转载请注明出处。

2、部分文章来自网络,已注明出处,如有侵权请与本人联系。

3、如果文章内容有误,或者您有其他更好的意见、建议请给我留言,我会及时处理!