广告联盟网

 找回密码
 注册
查看: 1055|回复: 1
打印 上一主题 下一主题

个人总结的网站开发的要点.原创,请求落伍.

[复制链接]
跳转到指定楼层
1#
发表于 2007-6-19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.显示需要选择的数据时,一定先要此数据是否为海量数据.例如:选择下拉框中加100条记录.你的用户不骂死你.<br />2.尽量不要限制用户的输入内容.<br />&nbsp; &nbsp;&nbsp; &nbsp;对输入内容进行验证(正则表达式)<br />&nbsp; &nbsp;&nbsp; &nbsp;分割及处理返回为空的项(String.split(new String[]{' ',';'},StringSplitOptions.RemoveEmptyEntries))<br />&nbsp; &nbsp;&nbsp; &nbsp;考虑中文,全角字符内容.<br />3.后台界面设计时就预先定好css,一般后台界面开发完成后,界面改动不是很大,处理下css就行了.否则一个个td改累死你.<br />4.网站目录的统一规划.比如后台管理都放到管理员目录里.这样方便一会对个别目录的访问权限进行限制,同时也可以限制哪些目录不需要被搜索引擎收录.<br />5.开发BN层类时,一定先考虑这个类的功能是否能够再拆分成更具体的子类,那么你就可能需要建个抽象类,然后继承它.不过,很多时候,我们考虑不到这些,那么当你的一个类中的方法越来越多时,你就该考虑是否有必要对这个类进行拆分了.<br />&nbsp; &nbsp;例如:我们有一个处理汽车的逻辑类,刚开始,没有问题,但后来,汽车种类多了,你就要在很多时候判断这是什么类型的汽车,然后再根据这个类型的汽车调用对应的方法去处理.这时我们就要把这个类进行拆分.新建一个汽车的抽象类(如果它们中有很多重复的逻辑实现,那就要考虑再另建个汽车接口),然后对每个类型的汽车建实现类,这些实现类都继承上面的抽象类和接口.在每个类型的实现类中处理对应逻辑.<br />6.只向BN层传递参数(不要构造SQL语句参数,这个应该在BN层或Data层中对应表的Filter类中构造).<br />7.根据用户输入的内容来构造SQL语句时,一定要使用传递参数的方法,这样可以有效的仿制sql注入攻击.就是先构造带各个参数的sql语句,例如id=@id,然后用SQLParameter生成要传递的参数.<br /><br />8.在有可能会被大量访问的页面中或对页面有速度要求时,禁用页面ViewState,页面控件使用Html提供的控件.<br /><br />9.不要使用Net2.0新增的CallBack功能,要Ajax就直接写javascript 利用xmlhttp.网上多的是代码.<br /><br />10.查询数据有返回时,不要利用DataSet类,对数据库结构依赖性太高.要把数据转换为Data层中对应的DT和DV类(DT和DV类可以有效的防止因打字错误造成的运行时问题,并能够在编译时就提示错误.).并存储在IList对象中返回.<br /><br />11.后台以外的无限制访问的页面链接的参数应该清晰明了,便于用户自行构造和搜索引擎收录<br /><br />12.发现不同页面中包含相同部分时,马上想到要进行拆分,新建用户自定义控件.<br /><br />13.Asp.net控件的事件绑定代码要求最好定义在后置代码页面中.<br /><br />14.给DataSource指定数据源,应该放到该控件的DataBinding事件中处理.<br /><br />15.页面之间传递参数时,如果中间是利于javascript函数处理的,使用javascript代码传递的中文很有可能会产生乱码问题.可以用下面js代码进行处理.<br /><br />function EncodeUtf8(s1)<br /><br />{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var s = escape(s1);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var sa = s.split(&quot;%&quot;);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var retV =&quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;if(sa[0] != &quot;&quot;)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;retV = sa[0];<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;}<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;for(var i = 1; i &lt; sa.length; i ++)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if(sa<i>.substring(0,1) == &quot;u&quot;)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;retV += Hex2Utf8(Str2Hex(sa<i>.substring(1,5)));<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;else retV += &quot;%&quot; + sa<i>;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;}<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;return retV;<br /><br /> }<br /><br /> function Str2Hex(s)<br /><br /> {<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var c = &quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var n;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var ss = &quot;0123456789ABCDEF&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var digS = &quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;for(var i = 0; i &lt; s.length; i ++)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;c = s.charAt(i);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;n = ss.indexOf(c);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;digS += Dec2Dig(eval(n));<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br /><br />&nbsp; &nbsp;&nbsp; &nbsp;}<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;//return value;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;return digS;<br /><br /> }<br /><br /> function Dec2Dig(n1)<br /><br />&nbsp;&nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var s = &quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var n2 = 0;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;for(var i = 0; i &lt; 4; i++)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;n2 = Math.pow(2,3 - i);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if(n1 &gt;= n2)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;s += '1';<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;n1 = n1 - n2;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;else<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; s += '0';<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;}<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;return s;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;<br /><br /> }<br /><br /> function Dig2Dec(s)<br /><br /> {<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;var retV = 0;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;if(s.length == 4)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; for(var i = 0; i &lt; 4; i ++)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; {<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; }<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; return retV;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;}<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;return -1;<br /><br /> }<br /><br /> function Hex2Utf8(s)<br /><br /> {<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;var retS = &quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;var tempS = &quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;var ss = &quot;&quot;;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;if(s.length == 16)<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;tempS = &quot;1110&quot; + s.substring(0, 4);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;tempS += &quot;10&quot; + s.substring(4, 10);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;tempS += &quot;10&quot; + s.substring(10,16);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var sss = &quot;0123456789ABCDEF&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;for(var i = 0; i &lt; 3; i ++)<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;{<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;retS += &quot;%&quot;;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;ss = tempS.substring(i * 8, (eval(i)+1)*8);<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;retS += sss.charAt(Dig2Dec(ss.substring(0,4)));<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;retS += sss.charAt(Dig2Dec(ss.substring(4,8)));<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;}<br /><br />&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return retS;<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;}<br /><br />&nbsp; &nbsp;&nbsp;&nbsp;return &quot;&quot;;<br /><br /> }<br /><br /> <br /><br />16.搜索结果对不同字段按不同比例进行排序.例如:对周统计和月统计两个字段分别按0.4和0.6的比例进行排序.select weekcount,monthcount from tablename order by (weekcount*0.4 + monthcount*0.6)<br /><br />17.对显示结果列表的每条记录进行点击量或浏览量统计,建议点击跳转到一个通用页面进行统计,然后在根据需要进行处理.<br /><br />18.不使用和无用代码尽快删除<br /><br />19.类和方法的注释最好使用///方式,方便其它开发人员使用.<br /><br />20.不要将获取的数据处理为特殊构造的字符串格式,并作为返回值或参数,这样会限制数据内容.例如:”数据;数据;”这个字符串格式会导致数据内容不能包含分号.<br /><br />21.后台页面数据非必要不要保存在Session中,放到ViewState中保存.离开该页后数据自动清除.Session不会.<br /><br />22.SQL语句的构造,尤其是查询条件的特殊处理应该放到Data层的该对应表的Filter类中处理.便于后期维护.<br /><br />23.Data层的DV类用于返回数据结构的扩展,例如多表查询,可以在DV中添加保存返回的其它表字段的数据属性.也可以新建一个属性用来保存所属子表的数据对象,方便对父子表等类似情况产生的数据结构进行处理.parentclassDV.getChildclassDV.fieldData
2#
发表于 2007-6-19 | 只看该作者
看看,学一学知识..
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|广告联盟网  

GMT, 2024-4-29 , Processed in 0.079255 second(s), 19 queries .

Powered by Discuz! X3.2

© 2005-2021 www.ggads.com GGADS 广告联盟网

快速回复 返回顶部 返回列表