NO IMAGE
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語句,例如[email protected],然後用SQLParameter生成要傳遞的引數.
8.在有可能會被大量訪問的頁面中或對頁面有速度要求時,禁用頁面ViewState,頁面控制元件使用Html提供的控制元件.
9.不要使用Net2.0新增的CallBack功能,要Ajax就直接寫javascript 利用xmlhttp.網上多的是程式碼.
10.查詢資料有返回時,不要利用DataSet類,對資料庫結構依賴性太高.要把資料轉換為Data層中對應的DT和DV類(DT和DV類可以有效的防止因打字錯誤造成的執行時問題,並能夠在編譯時就提示錯誤.).並儲存在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.substring(0,1) == “u”)
           {
               retV = Hex2Utf8(Str2Hex(sa.substring(1,5)));
             
           }
           else retV = “%” sa;
      }
    
      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.4和0.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