您的位置:首页 > 编程语言 > ASP

Web Form 与 Asp.net MVC架构、开发之异同

2015-07-02 16:53 561 查看
本文所说的Web Form指的是基于.net 平台开发网站的框架(我们通常称之为:Asp.net),Web Form实际上分为两个部分:Web Form(可视化界面)和Asp.Net(后台web组件)。所有System.Web.UI.*命名空间下的可以称为Web Form ,System.Web.*命名空间下的可以称为Asp.net。Asp.net诞生于2002年初,Web Form之前的微软Web 开发技术有ASP,ASP把业务逻辑和标语语言(html)代码混合在页面里,Web Form对ASP开发人员来说是一个全新变化,Web Form将大部分服务器端代码移到一个类文件中,并且用动态服务器控件代替HTML标签,Web Form不仅可以让业务逻辑和标语语言代码分离,还提供了更强大的开发平台:net 框架,可以快速开发web程序,比如可以拖放控件。

尽管Asp.net提高了性能并且改进了调试体验,但是还是有很多问题。
首先,Web Form System.Web命名空间的部件是紧耦合的,Web Form仍然关注在网页上,虽然代码可以移植到其他地方,但仍然难以做到业务逻辑和用户视图分离,在Web Form架构下,每个网站的URL由单个的物理文件.aspx表示,而且每个页面与页面代码类紧密耦合,页面无法动态选择自己的绑定类,代码类无法渲染别的视图,页面代码类中的代码也不可能进行单元测试。

其次,管理状态和数据是任何程序非常重要的内容,但web程序的通信是基于http协议的,http协议是一个无状态的协议,而且是非持续连接,每个请求对应一个客户端请求和一服务器应答。web服务器必须分开处理每个请求,因此无法知道客户端请求的前后消息,这样服务器与客户端无法进行有效的会话,web应用程序这种无状态特性使得管理状态数据变得非常复杂,举个例子:实现一个多步用户注册web应用程序就比单步注册要多做许多的工作量,如果做成从下一步还能回到上一步,工作量更是要成倍增加,增加的工作量就是因为要记录程序状态。为了在无状态的中介中实现有状态的会话,Web Form 引入了视图状态的概念,视图状态把服务器与客户端的交互状态存储的页面的隐藏域中,视图状态让服务器与客户端交互变得简单,但是它包含的数据可能会很臃肿,占用带宽,即使是很简单的页面,大小也可能超过100KB。

基于上面的Web Form 的一些缺点及其他的一些原因,随着ajax技术的流行,ASP.NET框架上出现了一些新的web开发技术:
目前ASP.NET开发网站主要有三种方式:
第一:用aspx,服务器控件、C#这类技术来实现:
采用这种方式开发 服务端要做的事情很多,HTML的生成, 简单的JS交互,客户端验证,等等,全由服务端来处理,所有页面的生成以及交互的逻辑全部服务端来完成,页面与用户的交互性通常不会很友好,比如:提交数据时经常会刷新整个页面。

第二:页面+AJAX方式:
这种方式页面只是呈现数据, 表单的提交全采用AJAX方式了。这样做的好处能将显示逻辑与数据更新逻辑有效的分离,不必纠缠在一起, 在这种开发模式下,由于页面只负责数据的显示,因此,只要能将业务逻辑尽可能地与UI分离,项目在维护上会容易很多, 采用这种方式开发的网站,页面与用户交互的友好性会好很多,而且也不会影响SEO,因此被较多的门户网站采用。
在ASP.NET中有一种比较原始的实现Ajax的方式,那就是创建一个ashx,也有人会选择创建一个空的aspx去代替ashx,而且使用aspx还可以只输出一个HTML片段。

第三:纯AJAX网,在这类网站中,服务端由于不参与UI处理,网站可以只是些静态的HTML文件, 而且在设计页面时,只要留下一些占位符就可以了,UI元素全部由JS来生成。 这类网站的客户端通常会选择一个JS的UI框架来支持。这类界面相对于前二种来说,会更漂亮,用户的操作体验也会更友好。 但由于页面主要由JS来生成,对SEO的支持较差,因此,特别适合一些后台类的网站项目。

在前面所列的第二、第三种开发方式中,如果有一个合适的框架,会对开发工作有着非常重要的影响,在AJAX的发展过程中,微软曾经推出过ASP.NET AJAX框架,它可以在服务端生成一些JS的代理类,让客户端的JS可以直接调用服务端的方法。 虽然那个框架设计地很巧妙,并且与WebForm配合的很完美,只可惜那个框架不够流行。 后来的WCF通过一些配置也可以让JS去调用,不过,喜欢的人也不多,可能还是因为配置麻烦的缘故吧。 当后来微软推出了ASP.NET MVC框架时,一些人开始惊呼:AJAX非ASP.NET MVC框架不可。 因为ASP.NET MVC框架可以很容易让JS去调用一个C#方法,从此以后,再也不用去【读参数,调用方法,写输出】这些繁琐的事情了, 而且没有WCF那么复杂的配置。 的确,他们没有解决的问题,ASP.NET MVC框架很好地解决了。

微软推出的ASP.NET MVC框架,第一版在2009年发布。ASP.NET MVC是基于MVC模式(模型-视图-控件器)的架构,ASP.NET MVC与ASP.NET相同点在于他们的基础构架都是.Net,它们共享HTTP处理程序(handler)和模块(module),HTTP处理程序仍然会在ASP.NET MVC上下文中发挥作用, 事实上ASP.NET MVC管道本身正是从HTTP处理程序处理外部程序开始的,使用ASP.NET MVC简化了 Web Form应用程序开发的复杂部分,同时保留了ASP.NET管道的能力和灵活性,虽然ASP.NET MVC与ASP.NET有一些共同的东西,但是ASP.NET MVC是一种全新的编程模式,一种完全不同的架构,它具有松耦合,易扩展,高可维护的优点。与上面所说的ASP.NET 的缺点相比,ASP.NET MVC视图与逻辑是分离的,URL不是基于页面文件而是基于路由,依赖路由动态映射外部的URL到正确的控制器操作上,并允许操作动态指定要显示给用户的视图,服务器页面变成简单的视图,它只是等待控制器传递的对象填充的HTML模板,不再有回传事件生命周期,数据模型、应用程序逻辑和数据表现的关注点被清晰的分离。ASP.NET MVC抛弃了页面视图(View state),而是利用缓存与会话状态,ASP.NET MVC可以减少页面内容,但是可能增加后台处理请求和数据库请求的成本。Web Form 完全可以只用务器端控件开发整个页面而不使用HTML标签,所以Web Form视图依赖于服务器控件来渲染HTML代码,而ASP.NET MVC完全可以不用服务器控件控件,因此它要求开发者编写更多的HTML代码,用Razor语法的代码来渲染HTML代码,用HTML帮助方法(HtmlHelper)写HTML代码,开发人员可以直接在视图里调用它的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: