編程規范

 

 

通用程式設計規范

1. 程式結構要求

1.1 程式結構清晰,簡單易懂,單個函數的程式列數不得超過行。

1.2 打算幹什麼,要簡單,直接了當,代碼精簡,避免垃圾程式。

1.3 儘量使用NET庫函數和公共函數(無特殊情況不要使用外部方法調用windows的核心動態連結程式庫)

不要隨意定義總體變數,儘量使用局部變數。

 

2. 可讀性要求

2.1 可讀性第一,效率第二(代碼是給人讀的J)

2.2 保持注釋與代碼完全一致。

2.3 每個根源程式文件,都有檔頭說明,說明規格見規範。

2.4 每個函數,都有函數頭說明,說明規格見規範

2.5 主要變數(結構、聯合、類或對象)定義或引用時,注釋能反映其含義。

2.6 處理過程的每個階段都有相關注釋說明。

2.7 在典型演算法前都有注釋,同時演算法在滿足要求的情況下盡可能簡單。

2.8 利用縮進來顯示程式的邏輯結構,縮進量一致並以Tab鍵為單位,定義Tab為個位元組。

2.9 迴圈、分支層次不要超過五層。

2.10   注釋可以與語句在同一行,也可以在上行。

2.11   空行和空白字元也是一種特殊注釋。

2.12   一目了然的語句不加注釋。

2.13   注釋的作用範圍可以為:定義、引用、條件分支以及一段代碼。

2.14   注釋行數(不包括程式頭和函數頭說明部份)應占總行數的//常量定義(DEFINE)有相應說明。

 

3. 結構化要求

3.1 禁止出現兩條等價的支路。

3.2 禁止GOTO語句。

3.3 IF語句來強調只執行兩組語句中的一組。禁止ELSEGOTOELSERETURN

3.4 CASE實現多路分支。

3.5 避免從迴圈引出多個出口。

3.6 函數只有一個出口。

3.7 不使用條件賦值語句。

3.8 避免不必要的分支。

3.9 不要輕易用條件分支去替換邏輯運算式。

 

4. 正確性與容錯性要求

4.1 程式首先是正確,其次是優美

4.2 無法證明你的程式沒有錯誤,因此在編寫完一段程式後,應先回頭檢查。

4.3 改一個錯誤時可能產生新的錯誤,因此在修改前首先考慮對其他程式的影響。

4.4 所有變數在調用前必須被初始化。

4.5 對所有的用戶輸入,必須進行合法性檢查。

4.6 不要比較浮點數的相等,如:*==,不可靠

4.7 程式與環境或狀態發生關係時,必須主動去處理發生的意外事件,如檔能否邏輯鎖定、印表機是否聯機,對於明確的錯誤,要有明確的容錯代碼提示用戶。

4.8 單元測試也是編程的一部份,提交聯調測試的程式必須通過單元測試。

4.9 儘量使用規範的容錯語句.例如:

try

{

}

catch

{

}

finally

{

}

5. 可重用性要求

5.1 重複使用的完成相對獨立功能的演算法或代碼應抽象為aspnet服務或類。

5.2 aspnet服務或類應考慮OO思想,減少外界聯繫,考慮獨立性或封裝性。


程式命名規範

1     本規范部分地方以C#語言為例做說明﹐其它語言具有互通性。

2     變數命名(適用於區域Local變數)

命名必須具有一定的實際意義,形式為xAbcFgh,x由變數類型確定,AbcFgh表示連續意義字串,如果連續意義字串僅兩個,可都大寫如OK

類型

縮寫

舉例

BOOL

b

bEnable

char

chr

chrText

sbyte

sb

sbText

byte

bt

btText

int

n

nText

uint

ui

uiText

long

l

lText

ulong

ul

ulText

float

f

fText

double

d

dText

bool

b

bText

decimal

de

deText

string

str

strText

坐標

x,y

 

屬性

att

 

類成員變數

m_

m_nVal,m_bFlag

類靜態成員變數

s_

s_nVal,s_bFlag

函數內成員變數

P_

p_strText

 

類型

縮寫

舉例

BOOL

b

bEnable

char

chr

chrText

sbyte

sb

sbText

byte

bt

btText

int

int--

nText

uint

uint--

uiText

long

l

lText

ulong

ul

ulText

float

flt--

fText

double

dbl--

dText

bool

b

bText

decimal

dcm--

 

string

str

 

坐標

x,y

 

屬性

att

 

類成員變數

m_

m_nVal,m_bFlag

類靜態成員變數

s_

s_nVal,s_bFlag

 

不提議用總體變數,其於類的實例,儘量選取表示該類特性的字母,例如classText,class體現類的特性

3     常量命名和巨集定義

3.1    常量和巨集定義必須具有一定的實際意義;

3.2    常量和巨集定義在#include和函數定義之間;

3.3    常量和巨集定義必須全部以大寫字母來撰寫,中間可根據意義的連續性用下劃線連接,每一條定義的右側必須有一簡單的注釋,說明其作用;

4     資源名字定義格式(最好定義一個資源類)

4.1    菜單:IDM_XX或者CM_XX

4.2    點陣圖:IDB_XX

4.3    對話方塊:IDD_XX

4.4    字串:IDS_XX

4.5    DLGINIT:DIALOG_XX

4.6    ICON:IDR_XX

5     函數命名和命名空間,類的命名,介面的命名

5.1    函數原型說明包括引用外來函數及內部函數,外部引用必須在右側注明函數來源:模塊名及檔案名,如是內部函數,只要注釋其定義檔案名;第一個字母必須使用大寫字母,要求用大小寫字母組合規範函數命名,必要時可用下劃線

5.2    間隔,示例如下:

void PrintTrackData();

void ShowChar(int,int,char);

5.3    事件及函數的命名:

void EventH(objectsd,Evente)        //Event表示事件回應的函數

5.4    介面的命名:

介面的命名一般都以’I’作為首字母,為了和類區分,例如:iinterfaceIA

5.5    命名空間(例如namespaceA)和類的命名規則從原則上和函數命名相同:

6     結構體命名

結構體類型命名必須全部用大寫字母,原則上前面以下劃線開始;結構體變數命名必須用大小寫字母組合,第一個字母必須使用大寫字母,必要時可用下劃線間隔。對於私有數據區,必須注明其所屬的進程。全局資料定義只需注意其用途。

示例如下:

typedefstruct

{

charszProductName[];

charszAuthor[];

charszReleaseDate[];

charszVersion[];

unsignedlongMaxTables;

unsignedlongUsedTables;

}DBS_DATABASE;

DBS_DATABASEGdataBase;

 

 

7     控制項的命名:

7.1    C#控制項規則為了和net類庫統一﹐分WindowsForm程式和Web程式

7.2    WindowsForm程式(用小寫首碼表示類別)

控件類型

類名

命名

窗口

 

frm

下拉例表框

 

cob

按鈕

Button

cmd

文本輸入框

TextBox

txt

標籤

label

lab

圖像

image

img

 

picture

pic

網格

DataGrid

grd

捲軸

 

scr

列表框

 

lst

 

fram

fra

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

控件名稱

命名

Lable

lbl

TextBox(TextArea)

txt

PasswordField

pwd

Hidden

hid

Button

btn

LinkButton

Lbtn

ImageButton

ibtn

HyperLink

hlk

DropDownList

ddl

ListBox

lst

DataGrid

dg

DataList

dl

CheckBox

chk

CheckBoxList

chkl

RadioButton

rdo

RadioButtonList

rdol

Image

img

Panel

pl

Table

tbl

RequiredFieldValidator

rfv

CompareValidator

cv

RangeValidator

rv

RegularExpressionValidator

rev

CustomValidator

cv

CrystalReportViewer

crv

TreeView

tr

ListView

lv

Form(表單)

frm

還有資料對象

 

DataSet

ds

Sql(Ole)DataAdapter

Sql(ole)da

Sql(Ole)Connection

sql(ole)conn

Sql(Ole)Command

sql(ole)cmd

SqlDataReader

sqlrd

7.3    Web程式(用大寫首碼表示類別)

控件類型

類名

命名

窗口

 

Frm

按鈕

 

Cmd

下拉列表框

combo

Cob

文本輸入框

 

Txt

標籤

label

Lab

圖像

image

Img

 

picture

Pic

網格

Grid

Grd

捲軸

 

Scr

列表框

 

Lst

fram

 

fRa

 

8     C#程式及注釋規范

8.1    程式規范

8.1.1 程式編碼力求簡潔,結構清晰,避免太多的分支結構及太過於技巧性的程式,儘量不採用遞迴模式。

8.1.2 編寫程式時,亦必須想好測試的方法,換句話說,”單元測試”的測試方案應在程式編寫時一併擬好。

8.1.3 注釋一定要與程式一致。

8.1.4 版本封存以後的修改一定要將老語句用/**/封閉,不能自行刪除或修改,並要在檔及函數的修改記錄中加以記錄。

8.1.5 程式中每個block的開頭”{""}”必須對齊,嵌套的block每進一套,縮進一個tabTAB為個空格,block類型包括ifforwhiledo等關鍵字引出的。

8.1.6 對於比較大的函數,每個block和特殊的函數調用,都必須注明其功能﹐必要時用區段(StartEnd標識的注釋寫法)

8.2    注釋規范

8.2.1 原則上注釋要求使用中文;

8.2.2 檔案頭注釋

8.2.2.1      檔案頭基本注釋內容﹕公司名稱、版權、作者名稱、時間、程式功能等﹐複雜的演算法需要加上流程說明;

8.2.2.2      檔案修改注釋內容﹕修改人、修改時間、修改原因、異動內容等

8.2.3 函數(Function)/方法(Method)注釋

8.2.3.1      函數注釋擬采用C# XML注釋方法﹔

8.2.3.2      函數注釋內容﹕函數功能描述、參數(Parameters)描述、流程處理、調用樣例等﹐複雜的函數需要加上變數用途說明﹔

8.2.4 檔案頭注釋樣例

** ===================================================================

** 檔案名:                  

** 撰寫人:            

** 建立日期:           

** 功能描述:

** 相關檔案:     

** Copyright ©2003-2004 Maxense Co., Ltd.             

** ===================================================================

 

** =========================== 修改記錄 ============================

** 修改日期:                

** 撰寫人:            

** 修改原因           

** 修改內容:

------------------------------------------------------------------------

** 修改日期:                

** 撰寫人:            

** 修改原因           

** 修改內容:     

** =========================== 修改記錄 ============================

8.2.5 函式/方法注釋樣例

///

///

 

 

 

 

 

資料庫命名規範

1     User有特別要求或已給出資料庫結構(Database Schema)外﹐均需采用以下規范。

2     資料庫及Table命名

2.1    資料庫應需專案名稱而定﹐采用全部字母大寫方式﹔

2.2    Table名稱采用首字母大寫的連詞方式。

3     其它資料庫物件命名均需使用前綴+自訂名稱的方式()

物件名(Database Object)

前綴

自訂名稱

預儲程序(Stored Procedure)

USP_

首字母大寫的連詞

使用者自訂函式(User Defined Function)命名

UDF_

檢視表(View)

V_

觸發器(Trigger)

T_

4     預儲程序(Stored Procedure)規范

4.1    必須在預儲程序中寫上程式標頭

/** ===================================================================

** Name:                    

** Create User:             

** Create Date:             

** Function:

** Relation Table:    

** Version:      

** Copyright ©2003-2004 Maxense Co., Ltd.             

** ===================================================================**/

4.2    盡可能的在預儲程序中不使用游標(Cursor)

4.3    對於復雜的預儲程序要理好思路﹐必要時划分個多個相對獨立(依功能或使用頻率)的預儲程序或函式﹐再組合使用﹔

4.4    減少在預儲程序中使用臨時表(Temp Table)

5     使用者自訂函式(User Defined Function) 規范

5.1    程式標頭規范同預儲程序﹔

5.2    對於使用頻率較高的函式﹐應加入通用DB函式庫中﹐以便共享使用﹔

5.3    參數命名使用首字母大寫的連詞﹔

5.4    函式變數命名﹐采用變數資料型態縮寫(小寫)+首字母大寫的連詞

6     其它要求

6.1    對於復雜的多資料表查詢(Select Join)﹐應采用檢視表方式

 

 

 

 

.Net Class Library規划

1     本專案小組開發后續專案均需使用之﹐并在實用過程中不斷完善及擴充﹔

2     根命名空間(Namespace)約定﹕固定使用SZMAX

3     建議在類別方法中使用重載(Override)及給予參數預設值(Default Value)

4     擬划分成以下模塊開發

類別(Class)

類別說明

檔案名稱

命名空間(Namespace)

開發方式

DBLib

通用資料庫操作

DBLib.cs

SZMAX.DBLib

整理完善

DateLib

日期/時間

DateLib.cs

SZMAX.DateLib

新寫及整理

StrLib

字串操作相關

StrLib.cs

SZMAX.StrLib

新寫

EMailLib

Email類別

EMailLib.cs

SZMAX.EMailLib

整理完善

FtpLib

檔案上傳及下載

FtpLib.cs

SZMAX.FtpLib

整理完善

FileLib

檔案/資料夾操作

FileLib.cs

SZMAX.FileLib

新寫

WordLib

Word操作

WordLib.cs

SZMAX.WordLib

整理完善

ExcelLib

Excel操作

ExcelLib.cs

SZMAX.ExcelLib

待定

 

 

 

 

 

 

最好定義一個資源類

 

 

 

5     各類別模塊定義

5.1    SZMAX.DBLib(通用資料庫操作類)

編號

方法簽名(Method)

說明

1

 

 

2

 

 

 

5.2     

 

 

 

posted on 2007-07-27 14:42  brake  阅读(258)  评论(0编辑  收藏  举报

我的最愛 聯繫我們 無障礙