.Net平台下的B/S开发框架
一、前言
本文主要是对.Net平台下的几种B/S开发框架进行比较。只对比前端展现和界面业务逻辑的部分,对于后台的数据层、业务层、持久层等则不作讨论,因为这些部分是完全可以共用的。
主要从如下几个维度比较:
- 技术差异、成熟度
- 难易程度、学习成本
- 适应的范围
.Net平台下的B/S开发框架分类
总体来说,目前.Net平台下的B/S开发框架基本可以分为三大类:
- 基于控件和页面事件驱动思想的Web Forms
- 基于模型、视图、控制器的MVC模式
- 综合了Web Forms和MVC的一些特点而产生的框架(不是本文的介绍重点)
到目前为止,ASP.NET Web Forms和ASP.NET 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协议,属于另外一个话题,这里就不详细介绍了。具体可参考:http://baike.baidu.com/view/70545.htm,当然,要想做一个好的B/S应用,是非常有必要对HTTP协议做一些深入的了解的。
每一次的HTTP请求通过统一资源定位符(Url)开始,服务端在接收到一次Http Request之后,会由Web Server接管请求,然后交给具体的服务端程序进行逻辑处理(中间的这个处理过程会因为Web Server的不同而有所区别,总之是一个比较复杂的生命周期过程,以ASP.NET为例,详情可参考:http://msdn.microsoft.com/zh-cn/library/ms178473(VS.80).aspx),处理完成之后,最终将生成的结果发回给客户端。这个生成的结果一般是一段HTML文本、或者是一段二进制字节流。而客户端在接收到返回到信息之后,将这些信息解析出来,就形成了我们在浏览器上看到的实实在在的页面,至此就形成了一个完整的请求过程。
好吧,上面这些介绍可能和本文的这个议题没有太直接的关系,可能也有人为认为这些是一个很简单的问题,可是,你真的理解HTTP协议了吗?真的理解应用程序生命周期和页面生命周期了吗?你真的理解了我们经常用的Response.Redirect(“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版本之间的关系,当然,还有很多更细节、更具体的不同之处,请参考微软官方站点,这里就不详细介绍了,只是作为理解本文的一个知识扩展。
三、技术比较
ASP.NET Web Forms官方定义:
ASP.NET 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.
总结为如下几点:
- 拖拽式的编程模式。
- 事件驱动模型。
- 提供大量的控件。
ASP.NET MVC官方定义:
ASP.NET 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. ASP.NET MVC includes many features that enable fast, TDD-friendly development for creating sophisticated applications that use the latest web standards.
总结为如下几点:
- 基于历史悠久的MVC模式。
- 更加清晰的界面代码分离。
- 对HTML/CSS/JS更加完全的控制权。
- 体现了敏捷、测试驱动开发等思想。
关系图
在这里,有必要解释一下.Net、ASP.NET、ASP.NET Web Forms、ASP.NET MVC之间的关系,其层次关系可用如下的图来表示:
其中.Net Framework是所有框架的基础,ASP.NET在.Net Framework基础上提供了Web开发框架的基础,而ASP.NET Web Forms和ASP.NET MVC是由微软提供的两种目前最主流的Web开发框架。
ASP.NET Web Forms与ASP.NET MVC详细对比
通过从优点、缺点、可能存在的风险、可能存在的机会这四个方面,进行一个详细的比较,具体如下表:
目前的发展情况
先看下微软.Net Framework各个版本的发布时间、IDE支持、Windows默认安装的版本,来做一个比较:
可以看出,.Net Framework 1.0的发布时间为2002年,ASP.NET Web Forms作为当时ASP的替代也同时推出。经历了将近10年的发展,在企业级B/S系统开发上,扮演了重要的角色,目前各种框架和第三方控件支持,也让ASP.NET Web Forms越来越成熟,但同时Web Forms界面和代码的高度耦合、重量级的页面尺寸及复杂的页面生命周期等,也越来越被开发人员所诟病。
而Web Forms在互联网开发方面的不足,导致了广大的开发人员在开发互联网应用时,首选PHP、Python、Ruby等轻量级快速开发平台。为了改善这一现状,微软在2009年4月,在.Net Framework 3.5的基础上,推出了ASP.NET MVC 1.0版,ASP.NET MVC的推出,让广大的Web开发人员耳目一新,抛弃了大量的服务器端控件、各种各样的回发事件,让ASP.NET MVC的页面看上去是那么的清爽,而MVC模式也更利于代码层次的组织,充分体现了Web开发简单、高效的本质。到目前为止,ASP.NET MVC已经发展到3.0的版本,视图引擎方面也新增了简单、清晰的Razor。
四、难易程度及学习成本
于这个方面,是很难比较的,因为总体来说,不管是ASP.NET Web Forms还是ASP.NET MVC,其底层实现都是基于.Net Framework的。在具体的Coding层面,他们是完全一样的。而他们的学习难易程度,可能取决于你之前的技术积累和设计思想,我想一个Windows开发人员可能学习ASP.NET Web Forms更加容易一些,而一个ASP程序员或者PHP程序员,可能接受MVC思想更加容易一些。
学习成本对比表
而下表,则尽量从多个维度进行一个学习曲线的综合比较:
五、适用的范围
如下图所示,展示了ASP.NET Web Forms和ASP.NET MVC各自适用的场景。
适用场景总结
但事情无绝对,对于各自的适用场景,可能还有很多其他因素的影响,总结为如下几点:
- 如果是快速开发后台管理系统,需要呈现大量的数据、表格等,建议采用Web Forms。
- 如果是对页面性能有着更高的要求,建议采用MVC。
- 如果是做互联网应用,对UI有着很高的要求,建议采用MVC。
- 如果要采用TDD开发模式,建议采用MVC。
- 具有很复杂的页面逻辑,建议采用Web Forms。
- 团队人员的掌握情况也是需要重点考虑的因素之一。
- 如果是做系统升级,尽量采用和老系统一致的框架。
六、其他框架介绍
Monorail
Monorail作为早于微软官方出现的MVC框架,可以算作第一款基于.Net实现的MVC框架,属于开源项目Castle的子项目。目前最新的版本为2.1,作者深厚的设计功底,让大家充分领略到了MVC的魅力,以至于后来微软的ASP.NET MVC里的很多实现,都能在monorail里看到影子。
官方站点:http://www.castleproject.org/monorail/index.html
参考介绍:http://baike.baidu.com/view/1344802.htm
MonoRail实现的模板引擎有3个:
AspNetViewEngine 用传统的.aspx文件做模板, 可以照常使用aspx语法和服务器控件, 但是由于Webform的生命周期和MonoRail完全不同, 有时候会让人觉得别扭, 有部分特性也受到了限制.
NVelocityViewEngine 用NVelocity做模板引擎, 需要学习VTL语法, 但是使用很简单, 特别是很多java程序员已经熟悉velocity. 简单的语法也强迫程序员把逻辑和界面很好的分离开来, 方便跟美工配合.
BrailViewEngine 基于Boo的模板引擎, Boo是一种语法类似python的.NET语言, 据MonoRail的参考说, Brail引擎是功能最强, 性能最好的选择, 但Boo是一种陌生的语言, 这成了Brail引擎应用的最大障碍.
总的来说,Monorail与ASP.NET MVC是如此的相似,如果掌握了其中一个的应用,那么切换到另外一种框架是很容易的事情。 唯一的区别可能在于模板引擎的选择上,monorail官方推荐的是NVelocity,而ASP.NET MVC官方推荐的是Razor,显然,对于一个.Net(C#)程序员来讲,学习Razor比NVelocity还是要简单一些,尽管NVelocity也是一门非常简单的模板语言。
我之前的东家,也一直在使用Monorail作为开发框架,自己也使用过很长的一段时间,觉得各方面还是非常不错的。
Web Forms与MVC结合的框架
此类框架是一个泛指,前人已经有过不少的实践。总结来看的话,主要是基于以下目的:
- 解耦页面和页面逻辑代码。
- 实现可替换的页面。
- 减少微软对HTML的过度封装。
- 继续沿用Web Forms的页面生命周期思想和控件思想。
- 提供更好的性能。
这类框架不管是第三方还是个人,实现的都不少,举两个例子:
Discuz!NT
由康盛创想公司开发,到目前为止,已经经历了10多个版本的发展,到现在已经相对成熟,如果想搭建基于.Net的BBS,那Discuz是比较不错的选择。
详情请参考:http://nt.discuz.net/
优点:
- 强大的BBS功能,你能想到的基本上都想到了。
- 官方支持,版本持续更新中。
- 快速搭建BBS应用,几乎不用开发。
缺点:
- 定制化开发麻烦,除非花钱找官方定制。
- 不能无缝和现有系统整合。
.Net平台下的B/S开发框架的更多相关文章
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- Android平台下OpenCV移植与使用---基于C/C++
在<Android Studio增加NDK代码编译支持--Mac环境>和<Mac平台下Opencv开发环境搭建>两篇文章中,介绍了如何使用NDK环境和Opencv环境搭建与测试 ...
- Windows平台下Git服务器搭建
第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” = ...
- Windows平台下PHP开发环境的配置
Windows平台下PHP开发环境的配置 一.基本环境 1.Windows XP 32位 2.Apache 2.2.25,下载地址:http://mirror.bit.edu.cn/apache/ht ...
- Mac平台与Windows平台下AndroidStudio增量升级
Android Studio增量升级什么情况下使用最合适呢? 比如现在的as版本是2.2版本,而你的as版本2.0版本,这个时候点Check For Updates就没有反应了,因为你已经2个有版本没 ...
- win7平台下React-Native Android:Unable to upload some APKs
一.问题描述 根据网络上的Win7平台下React-native配置教程配置好开发环境的过程中,在艰难进行到react-native run-android这一步时,发现一直出现错误,截图如下: 错误 ...
- .net平台下C#socket通信(中)
上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...
- Linux平台下Lotus Domino服务器部署案例
Linux平台下Lotus Domino服务器部署案例 几年前我写了篇<RHAS2.1下安装中文LotusDominoR6.5图解>这篇文档被多个大型网站转载,曾帮助过很多公司系统管理员部 ...
- .NET平台下,关于数据持久层框架
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
随机推荐
- java和c#md5加密不同
java的mad5加密后为32位字符串,c#直接加密后可能不是32位,位数也不确定. 普通的写法 public static string Md5(string sourcein) { var md5 ...
- logback使用
须要的jar包: slf4j-api-1.7.7.jar logback-classic-1.1.2.jar logback-core-1.1.2.jar logback.xml配置文件,放在proj ...
- qsettings 中文键值 注释 支持
#ifndef SETTINGS_H #define SETTINGS_H #include <QString> #include <QVariant> class QSett ...
- LUN 和 LVM 知识
LUN是对存储设备而言的,volume是对主机而言的. lun是指硬件层分出的逻辑盘,如raid卡可以将做好的400G的raid5再分成若干个逻辑盘,以便于使用,每一个逻辑盘对应一个lun号,OS层仍 ...
- 【转】Android 应用测试总结
前提所有的功能分支已完成 启动:1. 启动入口:桌面正常启动,最近运行启动,所有程序列表中启动,锁屏快捷启动2. 其他入口:从其他程序开启应用,从外部以文件形式打开应用(如果有)3. 退回:从其他程序 ...
- 16Aspx.com源码2014年7月详细
Web电子商务网(三层)V2.0源码 2014-07-31 [VS2010] 源码介绍: Web电子商务网(三层)V2.0源码 源码描述: 一.源码特点 采用三层架构开发, ...
- Java分布式处理技术(RMI,JDNI)
http://hedaoyuan.blog.51cto.com/4639772/813702 1.1 RMI的基本概念 1.1.1 什么是RMI RMI(Remote Method Invocatio ...
- JDBC——数据层DAO
DAO:Data Access Object DAO 数据层 Service 逻辑业务层 View 视图层 entity 实体层 实现增.删.改.查的数据层 public class EmpDA ...
- struts2自定义类型转换器
首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...