ASP開發規範.doc - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- ASP開發規範.doc (http://www.webasp.net/article/15/14887.htm) |
| -- 作者:未知 -- 發佈日期: 2004-11-17 |
| 為了規範程序代碼編寫,提高代碼可讀性,降低後期維護成本,提高辦公效率,建議以後編寫的程序按以下幾條規範進行:
一、 統一VBSCRIPT和ASP程序編寫規範: (一)變量命名規則: 由於在ASP和VBSCRIPT中因為不需要聲明變量,同時不能聲明變量的類型,但為了提高代碼的可讀性,養成好的開發習慣,對於本系統開發的變量命名統一規則如下: 1. 使用Dim、Public、Private聲明變量; 例如:Dim iStudentNum 2. 變量類型的體現: a、 整型變量:以小寫字母i開頭,後面跟變量標示符,英文單詞的第一個字母大寫。 例如:下面聲明一個存儲數據庫記錄多少的變量 Dim iResordsetNumber b、 單精度實體變量:以小寫字母f開頭,後面跟變量標示符,英文單詞的第一個字母大寫。 c、 雙精度實體變量:以小寫字母d開頭,後面跟變量標示符,英文單詞的第一個字母要大寫。 d、 字符型變量:以小寫字母s開頭; e、 布爾型變量:以小寫字母b開頭; f、 數組變量:數組類型+「_」+「Array」+「_」+「變量標示符」 例如:定義一個存儲學生成績的數組(存儲單精度實體類型變量) Dim f_Array_StudentMark 3. 變量標示符要符合標示符標準,同時容易理解,盡量使用英文單詞來代替,盡量避免使用縮寫或簡寫。 例如:存儲校友通訊錄的字符串變量定義為: Dim sSchoolfellowAddressList; 雖然這樣定義在輸入的時候比較麻煩,但是,它大大提高了程序的可讀性,見其變量命名就知其意。在做變量查找的時候也比較方便。 速度和性能總是不能兩全,為了方便後者我們也就只有犧牲速度。 4.在變量定義後面加變量功能定義的註釋。 (二)常量命名規則: 類型體現和上面一樣,不一樣的地方是,所有後面的標示符全部大寫,例如: 定義一個存儲語言種類的的字符型常量: Const sLANGUAGE_TYPE=」Chinese」 (三)功能函數、過程命名規則: 1. 使用Function聲明函數,用Sub聲明過程; 2. 函數名或過程名的第一個字母大寫,且後面的每個單詞第一個字母大寫。 例如: Function CheckValidityOfInput(sStuentMark) 『此處寫代碼 ………… End Function 3. 函數名或過程名要容易讀,簡單明瞭。 4. 在函數前面加註釋,說明函數功能、參數說明、創建日期、修改日期、修改原因、創建人、修改人等相關信息。 (四)代碼縮進標準: 為了提高代碼的美觀型和易讀性,在此提出代碼編寫的版面格式:區間與區間之間以一個<Tab>為間距。 例如: 『*********************************************************** 『功能:檢測輸入字符串中的單引號,如果有則把原來的一個單引號變成兩 『 個單引號,兩個變成四個,依次類推,從而避免SQL語句執行錯誤。 『創建人:XXXX 『創建時間:2002-7-6 『修改時間: 『修改原因: 『修改人: 『輸入參數說明:sInputString:需要進行單引號檢測的字符串 『*********************************************************** Function CheckValidityOfInput(sInputString) Dim iCirculationControl 『控制循環 Dim sApartString 『分離字符檢測 Dim iLenOfInput 『輸入字符長度 iLen= Len(Trim(sInputString)) For iCirculationControl = 1 To iLen If Mid(sInputString, iCirculationControl, 1) <>"'" Then sApartString = sApartString & _ Mid(Trim(sInputString), iCirculationControl , 1) Else sApartString = sApartString & "''" End If Next CheckValidityOfInput = sApartString End Function 二、 統一JavaScript程序編寫規範: JavaScript的命名規則和上面大部分相同,唯一不同的地方是:變量使用Var來聲明,在聲明結束後以分號(;)結束。 函數的代碼要求層次清楚,該寫在下一行的地方盡量往下一行寫,不要在一行中完成所有代碼,這樣看起來不容易,檢查錯誤也特別費時。 在寫函數的時候記著加註釋內容,以便以後維護時快速瞭解程序功能。 下面是一個JavaScript程序: <Script Language=」JavaScript」> //*********************************************************************** //功能:對Form中的Text,Password,TextArea對像進行單引號處理,解決由於單引號 // 起的系統錯誤。 //創建人:XXXX //創建時間:2002-7-8 //修改時間: //修改原因: //修改人: //********************************************************************** function CheckElement() { var sNeedCheck=""; //檢測屬於INPUT標籤的內容 var iControlInput=0; //控制循環 var iLocationInput=0; //控制位置 var iLengthInput=0; //存儲字符串長度 var sCheckingInput=""; //正在檢測的字符 var sReplaceInput=""; //替換字符 var sHaveCheckInput=""; //已經檢測的字符 var objInput; //存儲INPUT對像; var objTextArea; //存儲TextArea對像 var iControlTextArea=0; var iLocationTextArea=0; var iLengthTextArea=0; var sCheckingTextArea=""; var sReplaceTextArea=""; var sHaveCheckTextArea=""; //檢測頁面中的Text和Password對像中的單引號 for (i = 0; i < document.all.tags('INPUT').length; i++){ objInput = document.all.tags('INPUT')[i]; if(objInput.type=='text'|| objInput.type=='password'){ sNeedCheckInput=obj.value; iLengthInput=sNeedCheckInput.length; for(iControl=0;iControl<iLength;iControl++){ sCheckingInput=sNeedCheckInput.charAt(iControl); if(sCheckingInput==」』」) sReplaceInput=」』』」; else sReplaceInput=sCheckingInput; sHaveCheckInput=sHaveCheckInput+sReplaceInput; } } objInput.value=sHaveCheckInput; } //檢測頁面中的TextArea對像中的單引號 for (i = 0; i < document.all.tags('TEXTAREA').length; i++){ objTextArea = document.all.tags('TEXTAREA')[i]; if(objTextArea.type=='text'|| objTextArea.type=='password'){ sNeedCheckTextArea=obj.value; iLengthTextArea=sNeedCheckTextArea.length; for(iControl=0;iControl<iLength;iControl++){ sCheckingTextArea=sNeedCheckTextArea.charAt(iControl); if(sCheckingTextArea==」』」) sReplaceTextArea=」』』」; else sReplaceTextArea=sCheckingTextArea; sHaveCheckTextArea=sHaveCheckTextArea+ sReplaceTextArea; } } objTextArea.value=sHaveCheckTextArea; } } </Script> 三、 系統性能提高,代碼規範: 1.在ASP頁面內,凡是使用CreageObject()創建的對象(Com、Recordset等),對於這些變量,應當在該頁結束進行對像釋放:即 Set 對像變量名=Nothing 2.數據庫打開以後在不用的時候(通常是本頁最後面),需要對連接進行關閉; 3.對於SQL語句,存儲過程,盡量避免使用*來取所有字段,為了代碼的易讀性,SQL關鍵字要求全部大寫,字段部分小寫。 例如: SELECT name,age,birthday,telephone,address FROM SchoolFellow.Address WHERE name=』xxxx』 ORDER BY birthday DESC 4.在ASP頁中所有屬性值盡量使用雙引號括起來,特別是有屬性Value的值,不要因為省時間而把雙引號去掉(有的地方雖然可以去掉,程序不會出現錯誤,但,在有的地方去掉雙引號會引來更多的麻煩。) 例如: <INPUT type=」text」 id=」ClassID」 name=」ClassID」 value=」<%=sClassID%>」> 在這個例子中,如果把Value屬性值的單引號去掉,如果數據庫中出來的值有空格,空格後面還有值,結果,顯示的內容只有空格前面的內容,而後面的內容就會丟失。這只是其中一種情況,其他還有很多未知情況發生。 5. 配對標籤問題:對於象<a></a>之類的標籤,要注意檢查配對的位值,有沒有結束標誌。 6. 對於需要輸入字符串,且需要使用SQL語句的地方,需要進行單引號處理,調用/include/CheckQ.asp中的兩個方法(一個是客戶端處理,一個是服務器端處理,根據需要進行調用,安全性要求高的地方多數情況下採用服務器端處理。)之一。 7. 為了提高安全性,能使用ASP編寫的代碼,盡量採用ASP編寫,在服務器端運行,不讓用戶看到代碼。 8. 對於安全性要求特別高的地方,建議採用三層結構:使用VB或Delphi編寫商業邏輯層代碼(COM),盡量把數據庫的連接部分封裝到組件中,提高安全性能,通過組件和數據庫交流。 9. 對於網站的安全性,應該採用好的斷口掃瞄軟件,查看網站已經打開的斷口,把不安全的斷口給關閉。 四、 養成寫開發文檔的習慣: 對於每一個頁面設計(前接頁,後接頁),包括功能說明,頁面設計,頁面名稱,存放位置等,應當有相應的文檔記載。對於發生改動的地方,需要保留原來的部分(註釋或備份),並說明備份文件存放的地方,改動時間,修改人。 對於程序部分,應該有相應的設計流程,改動的時候,也需要設計改動流程圖,以便以後進行對比,和查找問題所在位置,以及問題的嚴重性分析。 |
| webasp.net |