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

      本文所说的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的支持较差,所以,特别适合一些后台类的网站项目。

       在前面所列的第2、第三种开发方式中,若是有一个合适的框架,会对开发工做有着很是重要的影响,在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代码,开发人员能够直接在视图里调用它的方法。     html

相关文章
相关标签/搜索