2024年1月24日发(作者:)

.Net平台下的B/S开发框架

一、前言

本文主要是对.Net平台下的几种B/S开发框架进行比较。只对比前端展现和界面业务逻辑的部分,对于后台的数据层、业务层、持久层等则不作讨论,因为这些部分是完全可以共用的。

主要从如下几个维度比较:

技术差异、成熟度

难易程度、学习成本

适应的范围

.Net平台下的B/S开发框架分类

总体来说,目前.Net平台下的B/S开发框架基本可以分为三大类:

1. 基于控件和页面事件驱动思想的Web Forms

2. 基于模型、视图、控制器的MVC模式

3. 综合了Web Forms和MVC的一些特点而产生的框架(不是本文的介绍重点)

到目前为止, Web Forms和 MVC都有着各自的追捧者,双方都认为各自所使用的技术才是最好的,我个人很反对这种观点,马克思等革命先烈告诉我们,看待事物要用辩证、唯物的思想,存在即合理。作为开发人员的我们,眼光不能太狭隘,多掌握一门技术总是好的事情。而本文也尽量从客观、平等的角度出发,做一个相对公正全面的对比,而不是某种技术框架的推崇。

二、知识准备

在进行具体的比较之前,我们先回过头来想一想,什么是B/S结构?而本文介绍的框架都是基于微软.Net Framework,那么什么又是.Net Framework?

What is B/S?

毫无疑义、理所当然,B/S指的就是B:Browser,S:Server,即我们的B/S程序的客户端就是浏览器(各种各样的浏览器,不管你是IE还是Firefox、Chrome等等),而服务端又是什么呢?服务端是指我们利用.Net平台(当然也可以是PHP、Java、Ruby、Python等)开发出来的应用程序,这些程序运行在各种Web Server上(例如:IIS、Apache、Tomcat等)。

而联系B和S的就是HTTP协议,由于HTTP无状态的特性,造成了B/S应用所有的请求只能从浏览器(客户端)开始,也只能采用拉的模式,即服务端无法推送消息到客户端,而这点是和C/S模式的Windows程序有着很大区别的。

关于HTTP协议,属于另外一个话题,这里就不详细介绍了。具体可参考:/view/,当然,要想做一个好的B/S应用,是非常有必要对HTTP协议做一些深入的了解的。

每一次的HTTP请求通过统一资源定位符(Url)开始,服务端在接收到一次Http

Request之后,会由Web Server接管请求,然后交给具体的服务端程序进行逻辑处理(中间的这个处理过程会因为Web Server的不同而有所区别,总之是一个比较复杂的生命周期过程,以为例,详情可参考:/zh-cn/library/ms178473(VS.80).aspx),处理完成之后,最终将生成的结果发回给客户端。这个生成的结果一般是一段HTML文本、或者是一段二

进制字节流。而客户端在接收到返回到信息之后,将这些信息解析出来,就形成了我们在浏览器上看到的实实在在的页面,至此就形成了一个完整的请求过程。

好吧,上面这些介绍可能和本文的这个议题没有太直接的关系,可能也有人为认为这些是一个很简单的问题,可是,你真的理解HTTP协议了吗?真的理解应用程序生命周期和页面生命周期了吗?你真的理解了我们经常用的ct(“url”)对应的HTTP状态是301还是302吗?之所以介绍这么多,还是因为个人认为:要想较好的设计B/S系统结构,或者说写出高效、优雅的B/S代码,这些都是不可或缺的知识。

What is .Net Framework

先看一段解释: NET Framework又称 .Net框架。是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application

development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷开发的技术。 .NET框架是微软公司继Windows DNA之后的新开发平台。.NET框架是以一种采用系统虚拟机运行的编程平台,以通用语言运行库(Common Language

Runtime)为基础,支持多种语言(C#、VB、C++、Python等)的开发。 .NET也为应用程序接口(API)提供了新功能和开发工具。这些革新使得程序设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务(web服务)的开发。.NET提供了一个新的反射性的且面向对象程序设计编程接口。.NET设计得足够通用化从而使许多不同高级语言都得以被汇集。

.Net Framework作为微软面向企业级应用的重要战略之一,有着十分重要的意义。.Net Framework是运行于.Net平台上所有应用程序的基础。而每一次版本的发布,

都会带来一些革命性的变化。如下图就展示了不同Framework版本之间的关系,当然,还有很多更细节、更具体的不同之处,请参考微软官方站点,这里就不详细介绍了,只是作为理解本文的一个知识扩展。

三、技术比较

Web Forms官方定义:

Web Forms lets you build dynamic websites using a familiar

drag-and-drop, event-driven model. A design surface and hundreds of controls

and components let you rapidly build sophisticated, powerful UI-driven sites with

data access.

总结为如下几点:

1. 拖拽式的编程模式。

2. 事件驱动模型。

3. 提供大量的控件。

MVC官方定义:

MVC gives you a powerful, patterns-based way to build dynamic

websites that enables a clean separation of concerns and that gives you full control

over markup for enjoyable, agile development. MVC includes many

features that enable fast, TDD-friendly development for creating sophisticated

applications that use the latest web standards.

总结为如下几点:

1. 基于历史悠久的MVC模式。

2. 更加清晰的界面代码分离。

3. 对HTML/CSS/JS更加完全的控制权。

4. 体现了敏捷、测试驱动开发等思想。

关系图

在这里,有必要解释一下.Net、、 Web Forms、 MVC之间的关系,其层次关系可用如下的图来表示:

其中.Net Framework是所有框架的基础,在.Net Framework基础上提供了Web开发框架的基础,而 Web Forms和 MVC是由微软提供的两种目前最主流的Web开发框架。

Web Forms与 MVC详细对比

通过从优点、缺点、可能存在的风险、可能存在的机会这四个方面,进行一个详细的比较,具体如下表:

目前的发展情况

先看下微软.Net Framework各个版本的发布时间、IDE支持、Windows默认安装的版本,来做一个比较:

可以看出,.Net Framework 1.0的发布时间为2002年, Web Forms作为当时ASP的替代也同时推出。经历了将近10年的发展,在企业级B/S系统开发上,扮演了重要的角色,目前各种框架和第三方控件支持,也让 Web Forms越来越成熟,但同时Web Forms界面和代码的高度耦合、重量级的页面尺寸及复杂的页面生命周期等,也越来越被开发人员所诟病。

而Web Forms在互联网开发方面的不足,导致了广大的开发人员在开发互联网应用时,首选PHP、Python、Ruby等轻量级快速开发平台。为了改善这一现状,微软在2009年4月,在.Net Framework 3.5的基础上,推出了 MVC 1.0版, MVC的推出,让广大的Web开发人员耳目一新,抛弃了大量的服务器端控件、各种各样的回发事件,让 MVC的页面看上去是那么的清爽,而MVC模式也更利于代码层次的组织,充分体现了Web开发简单、高效的本质。到目前为止, MVC已经发展到3.0的版本,视图引擎方面也新增了简单、清晰的Razor。

四、难易程度及学习成本

于这个方面,是很难比较的,因为总体来说,不管是 Web Forms还是 MVC,其底层实现都是基于.Net Framework的。在具体的Coding层面,他们是完全一样的。而他们的学习难易程度,可能取决于你之前的技术积累和设计思想,我想一个Windows开发人员可能学习 Web Forms更加容易一些,而一个ASP程序员或者PHP程序员,可能接受MVC思想更加容易一些。

学习成本对比表

而下表,则尽量从多个维度进行一个学习曲线的综合比较:

五、适用的范围

如下图所示,展示了 Web Forms和 MVC各自适用的场景。

适用场景总结

但事情无绝对,对于各自的适用场景,可能还有很多其他因素的影响,总结为如下几点:

1. 如果是快速开发后台管理系统,需要呈现大量的数据、表格等,建议采用Web Forms。

2. 如果是对页面性能有着更高的要求,建议采用MVC。

3. 如果是做互联网应用,对UI有着很高的要求,建议采用MVC。

4. 如果要采用TDD开发模式,建议采用MVC。

5. 具有很复杂的页面逻辑,建议采用Web Forms。

6. 团队人员的掌握情况也是需要重点考虑的因素之一。

7. 如果是做系统升级,尽量采用和老系统一致的框架。