asp.net webform设计思路的思考
我使用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得到迅速流行。
JSP技术比php、asp技术产生的更晚,JSP技术现在被用来开发超大型网站,但是并不是因为JSP技术本身非常优秀,而是因为它产生于java之上。
- 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,再到图片展示,LiveScript的发明(就是javascript),到CGI程序,再到Servlet拼接html技术,到php脚本,到asp动态页面技术,到jsp动态页面技术,到webfrom框架,spring框架,mvc框架这些技术背后隐隐有一系列思想在串联起来。一个东西的发明不是偶然的,往往有一个不起眼的起始。
asp.net webform设计思路的思考的更多相关文章
- ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要
ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...
- int.TryParse非预期执行引发的思考 ASP.NET -- WebForm -- 给图片添加水印标记 Windows -- 使用批处理文件.bat删除旧文件
int.TryParse非预期执行引发的思考 问题出现 这天在写一个页面,想谨慎些就用了int.TryParse,结果出问题了. 代码如下: Copy int id = 1000; //Reque ...
- asp.net abp模块化开发之通用树2:设计思路及源码解析
一.前言 上一篇大概说了下abp通用树形模块如何使用,本篇主要分析下设计思路. 日常开发中会用到很多树状结构的数据,比如:产品的多级分类.省市区县,大多数系统也会用到类似“通用字典/数据字典”的功能, ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- asp.net webForm也可以这样用Ajax -- My Ajax Framework [全屏看文]
对于asp.net WebForm项目,进行Ajax操作大概有三种方式:web服务(.asmx文件) , 一般处理程序(.ashx)和 一些Ajax控件. 对于.net提供的ajax控件,暂且不 ...
- 关于领域驱动设计(DDD)中聚合设计的一些思考
关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...
- Redis入门指南(第2版) Redis设计思路学习与总结
https://www.qcloud.com/community/article/222 宋增宽,腾讯工程师,16年毕业加入腾讯,从事海量服务后台设计与研发工作,现在负责QQ群后台等项目,喜欢研究技术 ...
- ENode 1.0 - 消息的重试机制的设计思路
项目开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架中消息队列的设计思路,本文介绍一下enode框架中关系消息的重试机制的设计思路 ...
- ENode 1.0 - 消息队列的设计思路
开源地址:https://github.com/tangxuehua/enode 上一篇文章,简单介绍了enode框架内部的整体实现思路,用到了staged event-driven architec ...
随机推荐
- golang的reflection(转)
作者:BGbiao 链接:https://www.jianshu.com/p/42c19f88df6c 來源:简书 反射reflection 可以大大提高程序的灵活性,使得interface{}有更大 ...
- Git的上传步骤
Git的上传步骤 1.Git的命令基础 Git是当下最流行的版本控制工具(VCS),由linux系统之父linus开发.它能实现 团队中的代码协作开发,它在代码同步和代码管理方面功能强大,理念先进. ...
- 如何正確的使用 Runtime.exec()
或許大部分有寫過Java程式的人都知道java.lang.Runtime這個class有一個method叫做exec(),可以被用來呼叫(調用)外部的程式.然而大部分的人都不知道這個method存在著 ...
- 整数划分 NBUT - 1046
题目很简单,把一个正整数分割成N个正整数之和.但是你得把所有的划分方法列出来,以字典序升序排序.对于每种划分方法,小的数字在前面. 思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小 ...
- CSS3系列教程:HSL 和HSL
使用CSS3 HSL声明同样是用来设置颜色的.下一个呢? HSLA? 是的,这个和RGBA的效果是一样的. HSL声明使用色调Hue(H).饱和度Saturation(s)和亮度Lightness(L ...
- esp8266(3) Arduino通过ESP8266连接和获取网站源代码
http://www.plclive.com/a/tongxinjiekou/2016/0422/374.html 在上一篇8266的基础上,这一篇做个具体的连接网站的例子,供大家参考.上一篇基础篇请 ...
- openzeppelin-solidity/contracts的代码学习——access
https://github.com/OpenZeppelin/openzeppelin-solidity/tree/master/contracts/access access - Smart co ...
- rman restore spfile from backup
spfile一般在$ORACLE_HOME/dbs(linux)目录,如果你丢失了spfile并不会引起实例立刻停掉,你的实例可以继续操作,尽管当你restore spfile的时候需要关闭重启实例, ...
- Ubuntu sudo apt-get 安装下载更新软件包命令详解
sudo apt-get install package 安装软件包sudo apt-get install package - - reinstall 重新安装 ...
- PAT A1150 Travelling Salesman Problem (25 分)——图的遍历
The "travelling salesman problem" asks the following question: "Given a list of citie ...