网站项目开发要点---一个实际项目开发心得
1.
显示需要选择的数据时,一定先要此数据是否为海量数据.例如:选择下拉框中加100条记录.你的用户不骂死你.
2.
尽量不要限制用户的输入内容.
      
对输入内容进行验证(正则表达式)
      
分割及处理返回为空的项(String.split(new String[]{' ',';'},StringSplitOptions.RemoveEmptyEntries))
      
考虑中文,全角字符内容.
3.
后台界面设计时就预先定好css,一般后台界面开发完成后,界面改动不是很大,处理下css就行了.否则一个个td改累死你.
4.
网站目录的统一规划.比如后台管理都放到管理员目录里.这样方便一会对个别目录的访问权限进行限制,同时也可以限制哪些目录不需要被搜索引擎收录.
5.
开发BN层类时,一定先考虑这个类的功能是否能够再拆分成更具体的子类,那么你就可能需要建个抽象类,然后继承它.不过,很多时候,我们考虑不到这些,那么当你的一个类中的方法越来越多时,你就该考虑是否有必要对这个类进行拆分了.
   
例如:我们有一个处理汽车的逻辑类,刚开始,没有问题,但后来,汽车种类多了,你就要在很多时候判断这是什么类型的汽车,然后再根据这个类型的汽车调用对应的方法去处理.这时我们就要把这个类进行拆分.新建一个汽车的抽象类(如果它们中有很多重复的逻辑实现,那就要考虑再另建个汽车接口),然后对每个类型的汽车建实现类,这些实现类都继承上面的抽象类和接口.在每个类型的实现类中处理对应逻辑.
6.
只向BN层传递参数(不要构造SQL语句参数,这个应该在BN层或Data层中对应表的Filter类中构造).
7.
根据用户输入的内容来构造SQL语句时,一定要使用传递参数的方法,这样可以有效的仿制sql注入攻击.就是先构造带各个参数的sql语句,例如id=@id,然后用SQLParameter生成要传递的参数.

8.在有可能会被大量访问的页面中或对页面有速度要求时,禁用页面ViewState,页面控件使用Html提供的控件.

9.不要使用Net2.0新增的CallBack功能,Ajax就直接写javascript 利用xmlhttp.网上多的是代码.

10.查询数据有返回时,不要利用DataSet,对数据库结构依赖性太高.要把数据转换为Data层中对应的DTDV(DTDV类可以有效的防止因打字错误造成的运行时问题,并能够在编译时就提示错误.).并存储在IList对象中返回.

11.后台以外的无限制访问的页面链接的参数应该清晰明了,便于用户自行构造和搜索引擎收录

12.发现不同页面中包含相同部分时,马上想到要进行拆分,新建用户自定义控件.

13.Asp.net控件的事件绑定代码要求最好定义在后置代码页面中.

14.给DataSource指定数据源,应该放到该控件的DataBinding事件中处理.

15.页面之间传递参数时,如果中间是利于javascript函数处理的,使用javascript代码传递的中文很有可能会产生乱码问题.可以用下面js代码进行处理.

function EncodeUtf8(s1)

{

      var s = escape(s1);

      var sa = s.split("%");

      var retV ="";

      if(sa[0] != "")

      {

         retV = sa[0];

      }

      for(var i = 1; i < sa.length; i ++)

      {

           if(sa[i].substring(0,1) == "u")

           {

               retV += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));

             

           }

           else retV += "%" + sa[i];

      }

    

      return retV;

 }

 function Str2Hex(s)

 {

      var c = "";

      var n;

      var ss = "0123456789ABCDEF";

      var digS = "";

      for(var i = 0; i < s.length; i ++)

      {

         c = s.charAt(i);

         n = ss.indexOf(c);

         digS += Dec2Dig(eval(n));

         

      }

      //return value;

      return digS;

 }

 function Dec2Dig(n1)

  {

      var s = "";

      var n2 = 0;

      for(var i = 0; i < 4; i++)

      {

         n2 = Math.pow(2,3 - i);

         if(n1 >= n2)

         {

            s += '1';

            n1 = n1 - n2;

          }

         else

          s += '0';

        

      }

      return s;

    

 }

 function Dig2Dec(s)

 {

      var retV = 0;

      if(s.length == 4)

      {

          for(var i = 0; i < 4; i ++)

          {

              retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);

          }

          return retV;

      }

      return -1;

 }

 function Hex2Utf8(s)

 {

     var retS = "";

     var tempS = "";

     var ss = "";

     if(s.length == 16)

     {

         tempS = "1110" + s.substring(0, 4);

         tempS += "10" + s.substring(4, 10);

         tempS += "10" + s.substring(10,16);

         var sss = "0123456789ABCDEF";

         for(var i = 0; i < 3; i ++)

         {

            retS += "%";

            ss = tempS.substring(i * 8, (eval(i)+1)*8);

          

          

          

            retS += sss.charAt(Dig2Dec(ss.substring(0,4)));

            retS += sss.charAt(Dig2Dec(ss.substring(4,8)));

         }

         return retS;

     }

     return "";

 }

 

16.搜索结果对不同字段按不同比例进行排序.例如:对周统计和月统计两个字段分别按0.40.6的比例进行排序.select weekcount,monthcount from tablename order by (weekcount*0.4 + monthcount*0.6)

17.对显示结果列表的每条记录进行点击量或浏览量统计,建议点击跳转到一个通用页面进行统计,然后在根据需要进行处理.

18.不使用和无用代码尽快删除

19.类和方法的注释最好使用///方式,方便其它开发人员使用.

20.不要将获取的数据处理为特殊构造的字符串格式,并作为返回值或参数,这样会限制数据内容.例如:”数据;数据;”这个字符串格式会导致数据内容不能包含分号.

21.后台页面数据非必要不要保存在Session,放到ViewState中保存.离开该页后数据自动清除.Session不会.

22.SQL语句的构造,尤其是查询条件的特殊处理应该放到Data层的该对应表的Filter类中处理.便于后期维护.

23.Data层的DV类用于返回数据结构的扩展,例如多表查询,可以在DV中添加保存返回的其它表字段的数据属性.也可以新建一个属性用来保存所属子表的数据对象,方便对父子表等类似情况产生的数据结构进行处理.parentclassDV.getChildclassDV.fieldData

posted on 2007-06-15 15:55 zack 阅读(2985) 评论(17)  编辑 收藏 所属分类: 想法

  回复  引用    
2007-06-15 16:10 | 路过 [未注册用户]
随便看看
  回复  引用    
2007-06-15 16:44 | 济南信息谷 [未注册用户]
希望有些比较有创意的东西
  回复  引用    
2007-06-15 16:44 | Tiny [未注册用户]
朴素,实际,实用。
  回复  引用  查看    
2007-06-15 16:54 | webq      
是啊,不好好考虑,最后不是累死就是骂死
  回复  引用  查看    
2007-06-15 17:03 | aspnetx      
关于海量数据,那次我问一高人,说400万级别的算不算的上海量数据.很明确的告诉我------还算不上.也许是所做的工作比较特殊,所以很难把100和海量联系到一起.
  回复  引用  查看    
2007-06-15 17:04 | aspnetx      
不使用和无用代码尽快删除
----------

这条我不认同,当然楼主有比较好的源代码管理工具另算
  回复  引用    
2007-06-15 19:25 | orichisonic [未注册用户]
我最后是被开除的...
  回复  引用  查看    
2007-06-15 21:29 | 八进制      
海量是相对的。对于一个普通的下拉列表,100条是有点超出它的控制范围;而对数据库产品来说,400万则是小菜一碟。
  回复  引用    
2007-06-15 22:07 | niukun [未注册用户]
同感
  回复  引用    
2007-06-16 00:53 | Mekk [未注册用户]
对显示结果列表的每条记录进行点击量或浏览量统计,建议点击跳转到一个通用页面进行统计,然后在根据需要进行处理.

统计点击次数我一般写在内容显示页.

  回复  引用    
2007-06-16 04:59 | yoyobao [未注册用户]
好定西,收藏了
  回复  引用    
2007-06-16 09:10 | koy [未注册用户]
真没有研究透String.Split,,居然还可以去掉分割出的空格,呵呵
String.split(new String[]{' ',';'},StringSplitOptions.RemoveEmptyEntries)

还可以这样写:
String.split([' ',';'],StringSplitOptions.RemoveEmptyEntries)
  回复  引用  查看    
2007-06-16 16:34 | OK_008      
学习!
  回复  引用    
2007-06-16 21:02 | xpengfee [未注册用户]
说的不错,做什么之前都应该有个规划啊
  回复  引用  查看    
2007-06-18 09:20 | 有容乃大      
mark一下。
  回复  引用  查看    
2007-06-18 10:38 | laifangsong      

第16点以前都不知道,:)
  回复  引用  查看    
2007-06-19 13:02 | 思然      
谢谢确实长见识

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-06-21 15:11 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: