您好,欢迎访问三七文档
一、ASP开发10条经验总结历时半年,我独自一人完成了一个局级单位的管理信息系统,共发布BETA版29次,正式版本3次。ASP+ORACLE环境,285个ASP文件,功能涉及数据录入、修改、模糊查询、自动统计、数据分析和报表,这个项目正在申报省级成果,现将我的10条经验总结如下,不对之处欢迎批评指正:1.不要再做ASP是否过时的讨论,重要的不是你是否使用先进的技术,而是你的设计思想是否先进;2.设计时要考虑项目的通用性,永远不要做没有推广价值的东西;3.程序设计要简洁,足够好的面向过程远远优于蹩脚的面向对象;4.理论是为实践服务的,所以不要被理论(尤其是设计模式)束缚;5.分工合理的情况下尽可能少的人员构成项目小组,通信的开销实在太大了;6.没有不变的需求,要为你的程序留下足够多的拓展空间,同时要考虑在系统向其它平台移植时尽量减少工作量和难度的途径;7.千万不要忽视界面设计,很多情况下这成为对你项目评价的唯一标准;8.用正规文档记下你的变量使用情况,随着系统的增大,DEBUG的成本几乎成倍增长;9.能用机器生成的代码就不要去手写,最宝贵的就是时间;10.选数据库还是要选ORACLE!二、ASP开发准则应用程序服务器被,或最终将被Web服务器所使用,它通常是运行ASP页面的IIS计算机。ASP是您的对象的唯一客户机。它带来了专门的线程和安全考虑。虽然许多使用ASP的Web站点根本就不用组件,但在这篇文章中假定ASP是Internet客户机和组件之间的桥梁。下面的asp/server01242000.aspASP组件准则(英文)提供ASP和组件之间的划分服务ASP最常用于在服务器上创建供客户机使用的HTML或XML文件,因此我们主要讨论这种使用方案。这就引出了一个常见的问题,如果ASP页面在服务器上,那么它们是否属于业务层的一部分呢?在组件世界中,答案通常是否。虽然ASP确实在服务器上运行,而且可能与应用程序服务器在同一个空间,但是这不能使它成为业务逻辑的一部分。随着用户界面工具的发展或者随着启用更多的业务对业务方案,拥有这种明确的区别将获得巨大的回报。话说到此,让我们来看一些最重要的业务层和表示层划分准则:令UI代码与业务逻辑分离。这包括编写与UI耦合的代码,例如使用ASP内部组件的MTS对象,让它与业务逻辑代码分离,如同在不同的DLL中。将事务与ASP页面分离。事务ASP在某些情况下非常好,但是组件和多层应用程序会改变这种情况。组件不应该依赖由客户机层来管理它们的事务和业务逻辑语义。将表示组件(使用请求和响应的组件)与Web服务器放在相同的机器和/或进程中。如果将使用ASP内部组件对象的对象放在远程机器上,那么对内部组件的所有调用将以回调形式发生。调用IIS客户机的是COM+服务器,它显著降低了性能并使安全配置复杂化。可以将这些调整对象放在标记为“库激活”的COM+应用程序中。ASP存在于服务器上,因此ASP页面必须符合资源共享规则,并且记住可伸缩性。请看下面的详细内容:在“会话”中,管理应尽量避免用户特定的状态。保持ASP无状态,并在可能的情况下允许资源池。操作方式在评价某个代码段是否属于业务逻辑或者表示层时,请问一下自己,“如果我必须用按键式电话应用程序代替我的ASP页面,那么该代码是否还有用?”如果答案为“是”,那么可以尝试将它划分为业务逻辑代码或者用户界面帮助器代码。如果改变了客户机后该代码不能用,或者如果它是构造用户界面的帮助器,则该代码属于表示服务层。它在ASP页面中,或在使用ASP内部组件的组件中。它不属于业务对象组件。理解桌面与ASP客户机的区别ASP是组件的特殊客户机,不同于桌面上的传统单线程Win32应用程序。主要区别概括如下。线程管理:ASP是多线程客户机。这意味着可以有许多并发活动一起运行,也许在同一时刻处理不同的ASP页面。这说明不能使对象伪称它是唯一的使用者来独占系统。这样做可能有意外的反应,例如,养成一个坏习惯:将对象存储在ASP会话或者应用程序变量中。安全环境:ASP是由Web站点中的InternetInformationServices5.0执行的,有低、中、高三种隔离度。甚至这些Web站点可以有不同的安全设置、允许或拒绝匿名访问、验证客户等等。所有这些设置产生了大量的方案,即不同的用户帐户最终用的是您的对象。轻松增长:这不是技术问题,而是Web应用程序所提供设施的副效应。传统上,为桌面应用程序增加用户基,要求仔细计划好向已知数量客户机的转出。ASP已经改变了该过程。在启动和运行后,ASP-VisualBasic应用程序可以方便地打开,供当地的或世界范围的所有职员、所有业务伙伴和所有客户使用。可以用这种方式描述—拥有超链接的单个电子邮件可以使用户基成十倍地增长。您的应用程序为此作好准备了吗?唯一了解的方式是对Web站点进行强度测试,以获得实际性能的预期值。关于强度测试的详细信息,请参阅“应用程序生命周期”一节。在ASP内应该如何使用VisualBasic对象?在页面范围内创建和取消您的对象。也就是说,尽可能使ASP页面无状态,只在暂时状态下依赖会话或应用程序变量。不要将对象存储在会话或应用程序变量中。这将ASP线程锁定到您的会话、取消所有可伸缩性的预期值。也就是说,Web服务器处理的用户数不会超过几十个。如果需要在会话或应用程序中存储内容,请使之成为数据而不是对象。还有可以遵守的许多其他准则。我们建议您阅读MSDNVoices上J.D.Meier撰写的专栏“Servin'itUp”。该专栏包括了大量的技术、实践和技巧,有助于开发可扩展的、可靠的ASP和组件应用程序。参考asp#serverMSDNVoices:Servin'itUpColumn(英文)SeminarOnline:在ASP下使用自定义COM组件(英文)aspMSDN杂志(英文)不要将引用存储在会话或应用程序中的VB对象中所有VisualBasic6.0组件都是“单元线程”的,就是说它们都运行在STA单元中。这意味着如果在线程中创建对象,那么对该对象的所有调用都必须用同一线程服务。许多线程(来自并发Web站点用户)使用STA对象的同一实例,会引起一连串的活动,有可能成为应用程序中的瓶颈。此外,在会话范围内存储用Server.CreateObject创建的STA对象,可以有效地将执行线程联系到当前用户,从而将应用程序的最大并发用户数限制到默认的20xN(N=处理器数量)。操作方式如果您按照我们的建议使对象无状态,则不需要存储引用以供客户机复用,并在应用程序范围内存储它们。客户机将能够独立创建、使用和取消它们自己的对象。这就减少了保持会话特有对象的需要,原因是它们不保留会话特有的状态。推荐的方式是使对象无状态,它在需要时访问数据库或其他存储区(例如cookies和LDAP)。如果需要使用会话或应用程序范围的数据,请将数据,而不是处理数据的对象,存储在此。您可以创建一个类,来封装对所需值的处理。参考asp信息:不要在会话或应用程序中存储STA对象(Q243543)(英文)PRB:将STACOM组件存储在会话中,会将会话锁定在单线程中(Q243815)(英文)信息:ASP下的组件线程模型概要(Q243544)(英文)学习IIS5.0中的新内容InternetInformationServer5.0增加了许多新功能。这些改进均已写入J.D.Meier的MSDN文章中:asp/server02282000.asp沿用IIS5.0中的ASP(英文)。下面是该文中最重要改进的概述。改进的、出色的性能Server.Transfer和Server.Execute方法集中式错误处理改进的浏览器功能改进的脚本引擎正则表达式分析器与ADO记录集XML功能的集成新的安全性、缓冲、隔离和管理功能三、Asp及Web开发中的常见问题表格的折行处理.<tablestyle=TABLE-LAYOUT:fixedwidth=200border=0cellspacing=0cellpadding=7bgcolor=#f7f7f7><tr><tdstyle=LEFT:0px;WIDTH:100%;WORD-WRAP:break-word>dffadfdaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasf</td></tr></table>此处主要是用css样式进行控制在<table>标签中有个style=TABLE-LAYOUT:fixed,其说明如下语法:table-layout:auto|fixed参数:auto:默认的自动算法。布局将基于各单元格的内容。表格在每一单元格读取计算之后才会显示出来。速度很慢fixed:固定布局的算法。在这算法中,水平布局是仅仅基于表格的宽度,表格边框的宽度,单元格间距,列的宽度,而和表格内容无关,此时在<td>标签中如果没有WORD-WRAP:break-word样式,表格中的内容将只能显示一部份,具体看表格的宽度了.word-wrap说明如下:语法:word-wrap:normal|break-word参数:normal:允许内容顶开指定的容器边界break-word:内容将在边界内换行。如果需要,词内换行(word-break)也会发生VBSCRIPT标记索引基本运算+数字加法及字符串连接-数字减法*数字乘法/数字除法Mod求余数\求商数&字符串连接^次方=相等<>不相等>=大于或等于>大于<=小于或等于<小于Not非And且Or或Xor异或循环及决策if....then若...则...if...then...else若...则...非elseif...非若selectcase...群组选择条件endselectfor...next计数循环while...wend条件循环(一)dowhile...loop条件循环(二)do...loopwhile条件循环(三)dountil...loop条件循环(四)do...loopuntil条件循环(五)数学函数Abs绝对值Sgn正负号Hex转换成十六进制Oct转换成八进制Sqr平方根Int取整数Fix取整数Round取整数Log以e为底的对数Sin正弦函数Cos余弦函数Tan正切函数字符串处理函数Len字符串长度Mid取部分字符串Left从字符串开头取部分字符串Right从字符串结尾取部分字符串Lcase转换成小写Ucase转换成大写Trim清除字符串开头及结尾的空格符Ltrim清除字符串开头空格符Rtrim清除字符串结尾空格符Replace替换字符串部分字符Instr判断是否包含于另一个字符串(从起始搜寻)InstrRev判断是否包含于另一个字符串(从结尾搜寻)Space任意字符数的空格符String任意字符数的任一字符StrReverse反转字符串Split以某字符分割字符串数据类型转换函数Cint转换成整形Cstr转换成字符串Clng转换成常整数Cbool转换成布尔函数Cdate转换成日期函数CSng转换成单精度CDbl转换成双精度日期时间函数Date现在日期Time现在时间NOw现在日期时间DateAdd增加日期DateDiff两日期差DateSerial日期设定DateValue日期设定Year现在年份Month现在月份Day现在天Hour现在时刻Minute现在分钟Second现在秒钟Timer午夜距现在秒数TimeSerial时间设定TimeValue时间所属部分WeekDay星期名称MonthName月份名称其它函数Array产生数组Asc字符ASCII码ChrASCII码字符Filter过滤数组InputBox输入窗口Join合并数组中的元素MsgBox信息窗口Lbound数组下界Ubound数组
本文标题:asp编程经验谈
链接地址:https://www.777doc.com/doc-5126897 .html