当前位置: 棋牌电玩游戏平台 > 独家报道 > 正文

跟我学ASP.NET MVC之一:开篇有益

时间:2019-08-06 01:51来源:独家报道
     ASP.NETMVC是微软公司的一款WEB开发框架,整合了“模型-视图-控制器”架构的高效与整洁,是敏捷开发最现代的思想与技术。它是传统ASP.NETWebForm的一个完善的替代品。 摘要: 1、

     ASP.NET MVC是微软公司的一款WEB开发框架,整合了“模型-视图-控制器”架构的高效与整洁,是敏捷开发最现代的思想与技术。它是传统ASP.NET WebForm的一个完善的替代品。

摘要:

1、当今的Web开发

ASP.NET MVC是微软的Web开发框架,结合了模型-视图-控制器(MVC)架构的有效性和整洁性,敏捷开发最前沿的思想和技术,以及现存的ASP.NET平台最好的部分。它是传统ASP.NET Web Form完整的替代技术。在这个篇文章中,我将介绍为什么微软创造了ASP.NET MVC,他跟他之前的技术有什么不同。

     1)REST(Representational State Transfer)已经成为应用程序在HTTP上互操作的主要体系架构,完全使SOAP失色。REST是根据表示真实世界实体的资源(URI)和表示在这些资源上可用的标准操作方法(HTTP方法)来描述一个应用程序。通过HTTP方法与资源地址的组合就可以对资源执行相应的操作,这种组合就是REST,执行这种操作的请求也称为REST化的请求。(对于REST的理解个人还是不透彻,后面会对此概念进行补充)

 

当前的Web应用程序不只是提供HTML服务,通常也需要将XML或JSON数据提供给用户,而WebForm很难支持。

ASP.NET历史

     2)整个软件行业向着敏捷与测试驱动开发方向的发展,如单元测试工具(NUnit、xUnit)、模仿框架(Moq、Rhino、Mocks)、控制反转容器(Ninject、AutoFac)、持续集成服务器(CruiseControl、TeamCity)、对象关系映射器(NHibernate、Subsonic、EF、Dapper、Petapoco)、UI自动化工具的提供。(测试驱动开发TDD思想:首先描述想要得到的行为范例,称为测试规范;然后进行软件设计,这样通过执行依附于这一实现的一套测试,来验证应用程序的稳定性和正确性

要想了解ASP.NET MVC的历史,需要先了解ASP.NET的历史。ASP.NET在2002年创建。他结合了ASP.NET WEB Form技术、ASP.NET IIS技术以及.NET技术。

     3)顺应Web标准和REST化的趋势。

通过WEB Forms,微软通过将用户接口(UI)建模成一系列分级的服务器端控件对象,隐藏了HTTP(和它的无状态性)和HTML(那时候很多开发者还不熟悉他)。每个控件在HTTP请求过程中保持和记录自己的状态,在需要的时候将自己呈现为HTML元素,并自动连接客户端事件(例如按钮事件)和相应的服务端事件处理器代码。实际上,Web Forms是一个设计成能在Web上发送经典事件驱动用户接口(GUI)的大的抽象层。他的想法是让Web开发感觉就像是Windows Form开发一样。开发者不需要处理一系列相互依赖的HTTP请求和响应。他们只需要关心UI逻辑,微软无缝地将Windows桌面开发者大军传送到Web应用世界。

2、ASP.NET WebForm的历史与问题

 

     ASP.NET WebForm的技术堆栈,如下图所示:

ASP.NET缺点

     图片 1

  • 视图状态负担:实际的在跨请求状态间的维护状态机制(View State)导致了在客户端和服务器端之间大的数据传输。传输的数据在非常简单的Web中都可能达到几百KB,并且在每个请求中来回传送,导致非常慢的响应时间,以及增加了服务端的带宽需要。

     此图的含义是WebForm建立在ASP.NET之上,而ASP.NET又建立在.NET平台之上,MVC框架所起的作用是替代WebForm。

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

  • 页面生命周期:连接客户端事件和服务端事件处理器代码的机制(一部分是页面生命周期)可能异常复杂和精细。很少的开发者能够成功地处理和控制在运行时的层级关系而不得到视图状态错误或者发现一些事件处理器处理器执行时奇怪地失败了。

     随着时间的推移,WebForm在实际项目中出现了一些缺陷:

     1)视图状态重负:维护状态的实际机制,也就是ViewState(视图状态)导致在客户端与服务器之间传输大块数据(达到几百KB),而且来回于每次请求之间,导致响应时间很慢,增加了服务器的带宽需求;

  • 错误的分离关注点:ASP.NET Web Form代码隐藏模型提供了一种将应用代码和HTML标记分离的方式。这种分离业务逻辑和表现的方式曾经受到广泛地欢迎。但是,在现实上,开发者被鼓励去将表现层代码和应用层代码糅合到一起到同样的怪异的代码隐藏类。(例如,将处理服务端控件树和处理数据库的代码)。导致脆弱和难以理解的结果。

     2)页面生命周期:连接客户端与服务器端事件处理器代码的机制很复杂,对于应用程序运行期间很难进行维护;

     3)关注分离的错误理念:本身将代码从HTML提取出来,放到后台代码类中进行处理是很一种很好的方式,但是一些开发者在后台代码中将表现代码与应用业务逻辑混合在一起,导致最后代码混乱并难以维护;

  • 有限的对HTML控制:服务端控件将自己呈现为HTML,但是并不是你必然你想要的HTML。早期的ASP.NET版本,HTML输出不能符合Web标准,不能好的利用层叠样式表(CSS),服务端控件产生不可预期的复杂的ID属性值,使用JavaScript很难访问他们。这些问题在最近的Web Forms发行版本中改进了很多,但是还是会得到非你预期的难处理的HTML。

     4)HTML的受限控制:服务器控件将自己渲染成HTML,但并不是所希望看到的HTML,在ASP.NET 4之前,并不能很好的使用CSS。同时会生成不可预知或复杂的ID,这样JavaScript就很难进行访问。

     5)有缺陷的抽象:WebForm试图尽量隐去HTML和HTTP(这是通过WebForm的抽象层实现的)。当你实现自己的方法时,需要放弃这种抽象,迫使采取回发事件机制的逆向工程。所以这种抽象对于开发者而言就构成一个极大的障碍和挑战;

  • 出现裂缝的抽象:Web Forms尝试在任何可能的时候隐藏HTML和HTTP。当你在实施客户行为时,你经常放弃这种抽象,逼迫你反过来使用会发事件机制或者使用迟钝的方式让他产生你想要的HTML。这时候,所有的WEB Forms抽象都变成了Web开发者们令人沮丧的阻挡。

     6)低可测试性:WebForm的这种紧耦合体系结构并不适合于单元测试,对于集成测试也很具有挑战性;

3、ASP.NET MVC的特点

  • 低测试性:Web Forms设计者们没有预料到自动化测试会变成软件开发过程中一个重要的组件。不出意料的,他们设计的紧密的耦合架构是不适合单元测试的。集成测试也一样被挑战。

     1)ASP.NET MVC框架实现了MVC模式(MVC模式在1978年就已经提出来了),由于ASP.NET MVC极大的改善了关注分离,所以特别适用于Web应用程序。因为与MVC应用程序的交互遵循着用户动作与视图更替的自然周期,在这个周期中,假设视图是无状态的。这与支撑Web应用程序的HTTP请求与响应方式非常吻合。

Web Forms不是都是不好,微软已经在提高他的灵活性上付出了很多努力,简化开发流程,甚至从ASP.NET MVC中拿了一些特性。当你需要快速开发的时候(一个相对不怎么复杂的web app一天能开发完毕的时候)Web Form更胜一筹。但是除非你在开发的时候非常仔细,否则你将发现你创建的应用程序非常难以测试和维护。

     2)可扩展性,MVC框架被构建成一系列独立的组件,如路由系统、视图引擎、控制器工厂,你可以很容易地用一个自己的不同实现来替换这些组件,通常有三种选择:

 

          a、使用组件现行的默认实现,此种可以满足大多数应用程序;

ASP.NET MVC主要优点

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

在2007年十月,微软宣告了一个新的MVC开发平台,建造在ASP.NET核心平台之上,清楚地设计成适应革新技术(例如Rails)以及Web Form批评者们的直接响应。下面部分描述新的平台怎样胜过Web Forms的以及怎样将ASP.NET技术重新带到了时代边沿。

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

区分MVC架构模式和ASP.NET MVC框架比较重要。MVC模式不是新东西-往回到1978年在Xerox PARC的Smalltalk工程-但是现在作为一个模式,他获得了Web应用的巨大的欢迎。有下面几个原因:

     3)HTML和HTTP上的严密控制,ASP.NET MVC会产生整洁与标准兼容的标记,其内置的HTML辅助器方法,可以产生与标准兼容的输出。ASP.NET MVC生成的页面不包含任何ViewState数据,这种对带宽的节约,可以极大的改善用户的体验,并且可以对浏览器与服务器之间传递的请求加以控制。

 

     4)可测试性,ASP.NET MVC应用程序不仅可以进行单元测试,还可以与UI自动化测试工具良好协作。

  • MVC架构

     5)强大的路由系统,采用REST风格的路由方案,有如下好处:

用户跟MVC应用交互按照自然的循环:用户发出一个行为,作为响应系统改变它的数据模型,发送更新后的视图给用户。然后重复循环。这对发出一系列的HTTP请求和收到响应的Web应用非常便利。

          a、搜索引擎对URL中找到的关键词有明显的权重,对同样的关键词的搜索,极有可能会转向一个较为简单的URL地址;

Web应用迫使组合一些技术(例如:数据库,HTML和执行代码),将他们分开到不同的层中。从组合这些层的过程中产生的模式自然地映射成了MVC概念。ASP.NET框架实现了MVC模式,在实现过程中,改善了关注点的分离。事实上,ASP.NET MVC实现了MVC模式相当部分的内容,特别适合Web应用。

编辑:独家报道 本文来源:跟我学ASP.NET MVC之一:开篇有益

关键词: .NET技术 ASP.NET MVC ASP.NET MVC技