1. 程式人生 > >網站專案開發要點---一個實際專案開發心得

網站專案開發要點---一個實際專案開發心得

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[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.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