我使用 asp.net 的 webform 框架进行 web 应用程序的开发已经差不多四年了, 在整个开发生涯中, 也使用过一年 asp.net 的 mvc 框架. 因为网上经常有讨论 webform 框架和 mvc 框架的优劣, 所以自己也对这两者进行了关注, 因为自己最熟悉 webform 框架, 所以就会考虑它的优势是什么? 设计思路是什么?
要理解 asp.net 的设计思路, 必须考虑它的产生年代, 产生的技术基础, 还有观察同时代其他动态网页技术的特点和思路.
首先是产生 asp.net 的技术基础, 以下援引百度百科:
"1996 年, ASP 1.0(Active Server Pages)版本出现了, 它引起了 Web 开发的新革命, 降低了动态网页开发的难度. 以前开发动态网页需要编写大量繁杂的 C 代码, 编程效率非常低下, 而且需要 Web 网页开发者掌握非常高的编程技巧. 而 ASP 使用简单的脚本语言, 能够将代码直接嵌入 html, 使设计 Web 页面变得更简单. 虽然 ASP 非常简单, 但却能够实现非常强大的功能, 这一切得益于其组件. 特别是 ADO 组件, 使得在网页中访问数据库易如反掌. 这一切推动了动态网页的快速发展与建设, 同时使 ASP 得到迅速流行.
1998 年, 微软公司发布了 ASP 2.0, 它是作为 Windows NT 4 Option Pack 的一部分提供的. ASP 2.0 与 ASP 1.0 的主要区别是外部的组件可以初始化, 使所有的组件都有了独立的内存空间, 并且可以进行事务处理. 内置的 Microsoft Transaction Server(MTS)使制作组件变得更容易.
2000 年 6 月, 微软公司宣布了自己的. NET 框架..NET 框架的基本思想是: 把原有的重点从连接到互联网的单一网站或设备转移到计算机, 设备和服务群组上, 而将互联网本身作为新一代操作系统的基础. 这样, 用户将能够控制信息的传送方式, 时间和内容, 从而得到更多的服务.
2001 年, ASP.NET 浮出水面. 它最初的名字为 ASP+, 后来改为 ASP.NET.ASP.NET 是微软公司 https://baike.baidu.com/item/微软公司 开发的一种建立在. NET 之上的 Web 运行环境, 它不是 ASP 的简单升级, 而是新一代的 Active Server Pages.ASP.NET 是微软公司新体系结构 Microsoft.NET 的一部分, 其中全新的技术架构使编程变得更加简单. 借助于 ASP.NET, 可以创造出内容丰富的, 动态的, 个性化的 Web 站点. ASP.NET 简单易学, 功能强大, 应用灵活, 扩展性好, 可以使用任何. NET 兼容语言. [4-5]
2002 年微软发布. NET 正式版本. NET Framework 1.0, 其中的 ASP 版本就是 ASP.NET 1.0, 在此以前发布了两个. NET 测试版本 Betal 和 Beta2.
2003 年微软发布了. NET Frameworrk 1.1 正式版, 其中 ASP 版本就是 ASP.NET 1.1.
2005 年微软发布. NET Framework 2.0 正式版本, 也就是 ASP.NET 2.0."
这是一段引自百度百科, 介绍从 asp 发展到 asp.net 的记述. 阅读这段记述你应该意识到, asp.net 是从 asp1.0 开始发展来的, 但是它不是直接从 asp 发展到 asp.net 的, 首先是 asp1.0, 然后是 asp2.0, 然后是 asp+, 再然后改名为 asp.net(这里如果分开看就是 asp , .net 这是两个词, 因为在 asp 的发展过程中另一个大的项目. net 出现了,.net 为什么出现, 不在讨论范围, 可以自行百度).asp.net1.1 技术的 web 框架就是 webform.
虽然我没打算梳理叙述. net 的产生和发展, 但是 asp.net webform 的产生却和. net 平台非常紧密.
在 asp 产生的前两年, 产生了另外一个非常有名的动态网页技术, 那就是 PHP. 这里援引一下 php 的概念:
"PHP(外文名: PHP: Hypertext Preprocessor, 中文名:" 超文本 https://baike.baidu.com/item/超文本 预处理器 https://baike.baidu.com/item/预处理器 ")是一种通用开源 https://baike.baidu.com/item/开源/246339 脚本语言 https://baike.baidu.com/item/脚本语言/1379708 . 语法 https://baike.baidu.com/item/语法/2447258 吸收了 C 语言 https://baike.baidu.com/item/C语言 , https://baike.baidu.com/item/Java 和 https://baike.baidu.com/item/Perl 的特点, 利于学习, 使用广泛 https://baike.baidu.com/item/广泛/6246786 , 主要适用于 https://baike.baidu.com/item/Web 开发领域. PHP 独特的语法 https://baike.baidu.com/item/语法/2447258 混合了 https://baike.baidu.com/item/C , https://baike.baidu.com/item/Java , https://baike.baidu.com/item/Perl 以及 https://baike.baidu.com/item/PHP 自创的语法. 它可以比 https://baike.baidu.com/item/CGI 或者 https://baike.baidu.com/item/Perl 更快速地执行动态网页 https://baike.baidu.com/item/动态网页/6327050 . 用 PHP 做出的动态页面 https://baike.baidu.com/item/动态页面/8586386 与其他的编程语言 https://baike.baidu.com/item/编程语言/9845131 相比, https://baike.baidu.com/item/PHP/9337 是将程序 https://baike.baidu.com/item/程序/71525 嵌入到 https://baike.baidu.com/item/HTML (标准通用标记语言 https://baike.baidu.com/item/标准通用标记语言/6805073 下的一个应用)文档中去执行, 执行效率比完全生成 https://baike.baidu.com/item/HTML 标记的 https://baike.baidu.com/item/CGI/607810 要高许多; PHP 还可以执行编译 https://baike.baidu.com/item/编译/1258343 后代码, 编译可以达到加密 https://baike.baidu.com/item/加密/752748 和优化 https://baike.baidu.com/item/优化/94618 代码运行, 使代码运行更快."
php 的产生早于 asp 技术, asp 应该是吸收有 php 技术的建造思想的, 之所以称为建造, 是因为 php 的起点非常低, 并没有被进行充分的设计, 它是从一个小工具快速发展起来的. 这里还想提一下另外一个重要的动态网页技术, 再次援引下百度百科:
" "JSP 全名为 Java Server Pages, 中文名叫 java 服务器 https://baike.baidu.com/item/服务器 页面, 其根本是一个简化的 https://baike.baidu.com/item/Servlet 设计, 它 [1] 是由 Sun Microsystems https://baike.baidu.com/item/Sun Microsystems 公司倡导, 许多公司参与一起建立的一种动态网页 https://baike.baidu.com/item/动态网页 技术标准. JSP 技术有点类似 ASP 技术, 它是在传统的网页 https://baike.baidu.com/item/网页 HTML(标准通用标记语言 https://baike.baidu.com/item/标准通用标记语言 的子集)文件 (*.htm,*. https://baike.baidu.com/item/html ) 中插入 Java 程序段 https://baike.baidu.com/item/程序段 (Scriptlet)和 JSP 标记(tag), 从而形成 JSP 文件, 后缀名为(*.jsp). 用 JSP 开发的 Web 应用是跨平台 https://baike.baidu.com/item/跨平台/8558902 的, 既能在 Linux 下运行, 也能在其他操作系统上运行.
它实现了 Html 语法中的 java 扩展 (以 <%, %> 形式).JSP 与 Servlet 一样, 是在服务器端执行的. 通常返回给客户端的就是一个 HTML 文本, 因此客户端只要有浏览器就能浏览.
JSP 技术使用 Java 编程语言编写类 XML 的 tags 和 scriptlets, 来封装产生动态网页的处理逻辑. 网页还能通过 tags 和 scriptlets 访问存在于服务端的资源的应用逻辑. JSP 将网页逻辑与网页设计的显示分离, 支持可重用的基于组件的设计, 使基于 Web 的应用程序的开发变得迅速和容易. JSP(JavaServer Pages)是一种动态页面技术, 它的主要目的是将表示逻辑从 https://baike.baidu.com/item/Servlet 中分离出来.
Java Servlet 是 JSP 的技术基础, 而且大型的 Web 应用程序的开发需要 Java Servlet 和 JSP 配合才能完成. JSP 具备了 https://baike.baidu.com/item/Java/85979 技术的简单易用, 完全的面向对象, 具有平台无关性且安全可靠, 主要面向因特网的所有特点."
JSP 技术比 php,asp 技术产生的更晚, JSP 技术现在被用来开发超大型网站, 但是并不是因为 JSP 技术本身非常优秀, 而是因为它产生于 java 之上.
这个时代的 asp,php,jsp 等动态网页技术, 都有一个共同点, 就是你访问 url 地址, 肯定是存在一个这样一个文件存在的. asp.net 产生的技术基础是 asp, 那么 asp.net 的 webform 框架使用这同一思想就顺理成章了. webform 的页面文件有两部分, 后缀名是. aspx 和. aspx.cs 两部分组成. 这个是有别于 asp 的, asp 页面文件只有一个, 后缀名是. asp. 从. asp 到. aspx 我们可以看到, aspx 是在 asp 的后面加了 x 字母, 联想微软的其他产品,.docx 取代. doc,.xlsx 取代. xls, 多少可以窥探到微软对技术升级的命名思考.
以上叙述, 讲到了 asp.net webform 将页面文件拆分成了两个部分. 这是很大的一个改进, 这种改进是为了解决一些问题(不是一个, 是一系列问题). 改进 asp 技术 cs 代码和 html 混在一起, 暴露代码细节, asp 页面不会被编译成 dll. 同时也有其他优势.
从 asp 到 asp.net, 在 webform 框架中大量内置了 ASP.NET 服务器控件, 这是一个很大的改变, 这种服务器控件分三种:
HTML 服务器控件 - 传统的 HTML 标签
Web 服务器控件 - 新的 ASP.NET 标签
Validation 服务器控件 - 用于输入验证
网上有人说, 这是为了解决开发 asp 页面会造成意大利面条的问题. 我的理解服务器控件的改变远不止于此, 假如你创建一个纯服务器控件的页面(asp.net 出现不久, 很多人就不建议这么干了, 至于为什么, 我知道会生成大量 viewstate 串, 当然还有其他原因), 然后对页面元素进行操作, 虽然使用的熟练, 你可能会意识到 webform 的页面文件不是在 html 字符中间拼东西, 或者说不是在一堆服务器无法理解的东东中间, 动态的生成一些字符. 它前进了很多步, 它把页面的所有 html 便签加上标识, 经过页面引擎处理, 变成了可以被灵活操作的类, 程序开发人员可以随意操作这些标签类, 然后在一个合适的时候, 再将这些类顺序的 "ToString()" 成字符串, 拼到页面上. 发明服务器控件技术, 作者的思想来源可能是桌面应用程序开发技术, 从 dos 操作系统(命令行交互), 到视窗操作系统(主要是鼠标点击, 键盘按键交互), 开发桌面应用程序, 会大量使用控件技术, 控件复用技术可以大大提升开发效率. 为什么猜测作者的思想可能来源于此, 因为 asp 技术出现时, 当时桌面应用程序开发还是主流, 作者可能浸染在这种氛围内, 把桌面应用程序开发的设计思想转移至 web 程序的开发. 这里要引出另外一个东西, 就是事件驱动, 随便新建一个 aspx 页面, 最重要的是事件处理方法, Page_Load.windows 操作系统中大量使用事件驱动, 是基于 "事件驱动模型" 的. 那么作者在 webform 中使用事件驱动, 也可能借鉴了 windows.
不管是服务器控件, 还是事件驱动, 这两种 (或者说是一种, 因为控件和事件之间本就相互关联) 设计思想很大的影响了 webform 框架, 开发 web 应用程序的方式. 服务器控件加事件驱动虽然利于很快开发一个管理系统型 web 程序, 但是并不符合 web 应用程序本身的运行思想, 这一点被很多人批评, web 程序因为不运行在桌面操作系统中, 最早的时候它甚至不能交互, 只是为了便于交流信息, 只用于展示信息. web 程序本质运行原理是, 通过浏览器向 web 服务器发送请求处理命令, 有 web 托管程序接收请求命令, 进行操作, 然后返回处理结果(结果可能是展示一篇文章, 或者是告诉你文章删除成功, 或者是将你提价的信息内容进行了保存).webform 容易让人误会它运行在操作系统或者浏览器中, 所有代码执行在客户端. 虽然现在的浏览器真的可以将动态页面放在浏览器端执行, 但是 webform 页面其实是有服务器端的程序处理的.
如果要评价和审视 webform 框架的设计思想, 不得不对比另外一个框架思想, 那就是 mvc 的框架 (模型) 的设计思想. mvc 模型的发明, 或许不是可以设计, 而是对事情的深入思考, 然后抓住本质的产物. mvc 模型是为了处理问题清晰明了, 降低耦合性.
由于不会 php 和 jsp 就没办法对比这两种技术了, 其实很想把它们也拉进来对比下, 特别是 jsp 技术, 因为 java 的跨平台性, jsp 设计时不会有太多 windows 的影子, windows 常常有种不想告诉你复杂的真相, 所以我给你包装一个简单的世界给你的感觉, 然后随着你的成长, 这种早期的包装可能会是一个大的负担, 或者说微软的东西有太多 windows 的影子, 过于围绕 windows 了.
最后总结一下, 如果你放开自己紧张的神经, 不给自己设限, 随意联想, 随意设计, 不过去考虑完美, 你会感觉到 web 技术发展一些思想的传承和变革. 从简单的 html 纯文本展示, 文本浏览器的发明, 背后的 http 协议 0.9, 再到图片展示, https://baike.baidu.com/item/LiveScript 的发明(就是 javascript), 到 CGI 程序, 再到 Servlet 拼接 html 技术, 到 php 脚本, 到 asp 动态页面技术, 到 jsp 动态页面技术, 到 webfrom 框架, spring 框架, mvc 框架这些技术背后隐隐有一条思想在串联起来. 一个东西的发明不是偶然的, 往往有一个不起眼的起始.
阅读本文请注意, 假如你感觉混乱, 那么就不要阅读引用的部分, 可以大概先只阅读其他内容.
本文并没有进行认真的考察和检验, 有的地方可能是错误的, 一些技术的发明先后也可能并不准确. 但是希望文中关注一个技术的发展历史的思路, 能给你学习提供一点助益.
来源: https://www.cnblogs.com/Tpf386/p/9588243.html