PB通用的編程規範

[PB]-PB編碼規範算法

**綜述sql

*編程對象的分類
以PowerBuilder做爲前臺開發工具,進行軟件開發的過程當中,所涉及的編程對象以下所示
序號 類別
1 源代碼
2 可執行代碼
3 資源文件(如pbr,bmp,ico文件)
4 配置文件(如ini文件)
5 其餘數據庫

*編程對象的組織
使用PowerBuilder開發工具產生的對象,能夠按照設計(正在編寫和調試)和運行(調試、編譯結束,能夠接受測試和運行)中的狀態進行編程對象的組織規劃,重點是目錄結構的劃分,具體目錄的相對關係以下所示
類別 目錄 說明
源代碼 SrcCode 可按子系統再劃分子目錄(如pbl等文件夾)
可執行代碼 Program或項目名稱 可按子系統再劃分子目錄
圖片文件 Images或pic等 包含應用圖標ICO文件、BMP/JPG/GIF文件
配置文件 Ini
其餘 Other編程

**版本說明
a. 軟件版本號標準爲A . B,其中A和B爲0到99之間的數字。
b. 當A大於1而且B爲奇數時,表示當前版本爲處於開發、測試階段的版本,定義爲「開發版」;當B爲偶數時,表示當前版本爲穩定的、可實際運行的版本,定義爲「穩定版」。
c. 當軟件開始開發時,肯定版本號爲0.1;隨着軟件開發的進度,版本號隨着每一次主要功能的完善而變化,最高達到0.99。
d. 軟件初步開發完成後,通過軟件開發小組內部測試,初步可以完成軟件需求提出的業務規範和技術要求,軟件基本能正常運行,此時,肯定該軟件版本號爲1.0 Beta X ,這意味着軟件能夠投入實際應用測試,其中X表明測試的次數。
e. 當軟件的1.0 Beta X 版本推出並通過用戶實際應用或者試運行測試後,此時,肯定該軟件版本號爲1.0 RC。這意味着軟件能夠投入實際應用運行。
f. 當軟件的1.0 RC 版本投入實際應用運行達到某一時限後,則認爲該版本已經穩定,能夠徹底正常地使用了,這時,肯定軟件的版本號爲1.0,這意味着軟件開發完成,能夠投入實際應用和推廣。
g. 當軟件進行升級時,若是功能變化不大,則次版本號變化;若是軟件功能發生重大變化時,主版本號變化。


**對象命名規範

*命名約定
a.部件名稱能夠達到40個字符,組成方式爲A_B。
b.A部分表示前綴,表示部件的類型。
c.緊跟着一條下劃線「_」。
d.B部分描述此部件的名稱。能夠根據狀況具體決定B的構成。推薦將B部分分解成兩部分: 功能代碼_功能描述。
e.在重要變量後面寫註解表示此變量的用途。
好比,經常使用的幾種對象命名是
窗口的命名:w_功能代碼_功能描述。
數據窗口控件的命名:dw_功能代碼_功能描述。
數據窗口對象的命名:d_功能代碼_功能描述。
菜單命名:m_功能代碼_功能描述。
用戶對象:uo_功能代碼_功能描述。服務器

*具體命名規則app

1. 函數的命名規則
函數名=‘函數適用範圍代碼’ +‘f’+‘_’+‘函數功能描述’,其中函數的
適用範圍代碼和意義以下:
g 全局函數;
w 窗口函數;
m 菜單函數;
u 用戶對象函數。
例:檢查SQL語句執行結果的全局用戶函數命名以下:gf_checksql()。ide

2. 應用
應用的命名應使用與該應用的意義相關聯的英文字母,例如,app_si表示社會保險應用系統。函數

3. PBL庫
PBL庫組織的好壞很重要,它會影響應用開發和維護的容易程度以及應用的性能。Library的組織應遵循如下原則:
a. Library的大小。PowerBuilder對Library的大小沒有限制,但最好使之小於1MB,Library太大,PowerBuilder要花更多的時間去打開和存儲對象,這會影響開發的效率。
b. Library的數量。儘可能用最少的Library數量。應在Library的數量和每一個Library中對象數量之間找到平衡點,若是Library數量太多而每一個Library中對象數量太少,搜索路徑會太長,影響運行效率。
c. Library的優化。要在Library畫筆中常常對Library進行優化。隨着時間的推移,Library會被分段,會使Library的存儲變得不連續,影響運行效率。
d. Library的分類組織。PBL庫可按子系統或功能組織,通常應用都包含公共PBL庫。每一個PBL庫文件命名應該與該文件做用相關聯,例如報表PBL庫文件命名爲report.pbl。每一個PBL庫文件應該包含詳細註釋,列出該PBL文件包含哪些對象,對應哪一個子系統,與其餘PBL(調用)關係等信息。工具

爲了有效地進行團隊開發,實現對PB源碼的管理,要求基於對各方因素(如應用代碼的執行效率和所佔存儲空間)和維護上的全面考慮,對PB源碼實行分類的原則。PowerBuilder的Library的分類原則有兩種方式:
(1)制定對象分類法
根據所制定的不一樣類的對象進行分類。
例:將全部的窗口放在一個Library中。
(2)功能模塊分類法
根據系統的功能模塊的不一樣,將屬於不一樣類的制定對象放在一個Library中。這是一種更爲有效的方式。oop

4. 初始化配置文件
初始化配置文件的命名必須與應用的名稱一致,擴展名爲.ini,例如:si.ini。用戶的可變環境信息都應該保存在該文件中,關鍵信息加密保存,而且提供管理工具,而不是手工修改該文件。

5. 資源文件
資源文件的命名必須與應用的名稱一致,擴展名爲.pbr,例如:si.pbr。

6. 窗口
窗口的命名必須以w(Window的首字符)開頭,加下劃線(_),其後緊接與窗口意義相關聯的英文字母(總長不得超過PowerBuilder的40個字符限制),而且在註釋(Comments) 框內寫出該窗口的做用(中文或英文),以下所示。
序號 窗口名稱 Comments
1 w_about 關於本系統的版權信息
2 w_system_error 系統出錯提示
3 w_main 系統主界面
4 w_report_sheet 報表輸出

7. 數據窗口
普通數據窗口的命名必須以dW(DataWindow縮寫)開頭,代碼表下拉式子數據窗口必須以dddw(DropDownDataWindow縮寫)開頭,加下劃線(_),其後緊接與數據窗口意義相關聯的英文字母(總長不得超過PowerBuilder的40個字符限制),而且在Comments 框內寫出該數據窗口的做用(中文或英文),以下所示。
序號 數據窗口名稱 Comments
1 d_system_error 顯示系統錯誤,被w_System_Error窗口調用
2 d_categories 對產品分類,被w_Report_Sheet窗口調用
3 d_detail_parts Parts of Products Described in Detail 
4 d_detail_function Products Function Described in Detail
5 dddw_sex 性別代碼表

8. 菜單
菜單的命名必須以 m(Menu縮寫)開頭,加下劃線(_),其後緊接與菜單意義相關聯的英文字母(總長不得超過PowerBuilder的40個字符限制),而且在Comments 框內寫出該菜單的做用(中文或英文),以下所示。
序號 菜單名稱 Comments
1 m_main Front End Main Menu
2 m_report Report Subsystem Menu
3 m_main_pop 主界面的彈出菜單

9. 函數
函數的命名必須符合<類型>f_subsystemname_detailname或 lf_detailname格式,其中gf表示是全局函數,subsystemname是子系統的英文縮寫,detailname是與函數意義相關聯的英文字母(總長不得超過PowerBuilder的40個字符限制),對於全局函數應該在Comments 框內簡短寫出該函數的做用(中文或英文),以下所示。
序號 函數名稱 Comments
1 gf_help_index 幫助子系統索引全局函數
2 lf_get_user_info 獲取用戶信息局部函數
3 gf_query_sortbyname 查詢子系統名排序全局函數

10. 用戶對象
用戶對象的命名必須以uo(UserObject縮寫)開頭,加下劃線(_),其後緊接與用戶對象意義相關聯的英文字母(總長不得超過PowerBuilder的40個字符限制),而且在Comments框內寫出該用戶對象的做用(中文或英文),以下所示
序號 用戶對象名稱 Comments
1 uo_external_function Cross platform user object ancestor
2 uo_report_structure User Object as a structure For report

11. 控件
控件的命名必須以控件名稱縮寫開頭,加下劃線(_),其後緊接與控件做用相關聯的英文字母(總長不得超過PowerBuilder的40個字符限制),以下所示
序號 控件名稱 控件縮寫 控件命名範例
1 CommandButton cb cb_ok
2 PictureButton pb pb_thank_info
3 CheckBox cbx cbx_age_show
4 RadioButton rb rb_typical_setup
5 StaticText st st_user_id
6 Picture p p_user_photo
7 GroupBox gb gb_detail_info
8 Line ln ln_h_separator
9 Oval oval oval_used_flag
10 Rectangle r r_photo_frame
11 RoundRectangle rr rr_companyflag
12 SingleLineEdit sle sle_user_name
13 MultiLineEdit mle mle_book_comments
14 RichTextEdit rte rte_student_answer
15 EditMask em em_telephone_no
16 HScrollBar hsb hsb_time_set
17 VScrollBar vsb vsb_money_set
18 DropDownListBox ddlb ddlb_your_favourite
19 DropDownPictureListBox ddplb ddplb_photo_preview
20 ListBox lb lb_department_name
21 PictureListBox plb plb_user_identification
22 ListView lv lv_all_user
23 TreeView tv tv_customers
24 TabPage tpg tpg_ordinary_super
25 Tab tab tab_super
26 DataWindow dw dw_user_info_detail
27 Graph gr gr_month_report
28 Ole ole ole_word_doc


**變量命名規範

變量取名應遵照命名規範,對使用頻繁的或關鍵變量,爲了便於閱讀和修改,在定義時應加上註釋標明其含義。例如:
String ls_name // 參保人員姓名
變量命名規則爲: 變量範圍 + 變量數據類型 + '_' + 含義代碼

*變量數據類型約定
數據類型 前綴
Any a_
Blob bb_
Boolean b_
Character c_
Date d_
DateTime dt_
Decimal dec_
Double db_
Integer i_
Long l_
String s_
Time t_
UnsignedInteger ui_
UnsignedLong ul_
DataWindow dw_
DataWindowChild dwc_
MailSession ms_
Menu m_
Structure str_
Transacttion trans_
Window w_
UserObject uo_

*變量範圍命名約定
範圍 字首 描述
Global g?_ 全局變量將在整個應用中有效。它們可能從
其餘對象面板中定義,但它們將在整個應用中有效
Shared s?_ 共享變量在一個對象及其實例中有效
Instance i?_ 實例變量僅在一個對象的實例中有效。相應對象
的不一樣實例中的變量保存各自的值
Local l?_ 局部變量僅在一段子程序或在script開始和結束時生效

由值傳遞的變量 v?_ 在定義函數時,參數僅傳遞值,不會被函數
(僅適用於函數變量) 改變,定義爲value,例:vdw_datawindow

由引用傳遞的變量 r?_ 在定義函數時,參數將被此函數改變,
(僅適用於函數變量) 定義爲reference,例:rl_long

注意:?表示相應數據類型,如i,c,l,s等數據類型前綴。

對於上述的內容作以下說明。
a. 全局變量的命名必須符合gT_subsystemname_detailname格式,其中g表示是全局變量(Globe),T是數據類型(DataType)的簡寫。subsystename是子系統的英文簡寫。detailname是有具體意義的英文字母。例如:gs_query_user_info ,即爲查詢子系統定義了一個字符串型全局變量。
b. 局部變量的命名必須符合lT_detailname格式,其中l表示是局部變量(Local),T是數據類型(DataType)的簡寫。例如:li_user_salary ,即定義了一個整數型局部變量。
c. 實例變量的命名必須符合iT_detailname格式,其中i表示是實例變量(Instance),T是數據類型(DataType)的簡寫。Detailname是有具體意義的英文字母。例如:is_product_name ,即定義了一個字符串型實例變量。


**編程規範

*書寫格式
a.用分層縮進的寫法顯示嵌套結構的層次。
b.在註釋段與程序段,以及不一樣邏輯的程序段之間插入空行。
c.每行只寫一條語句,當須要滾動顯示時應該分行書寫。

*流控制
流控制首先應遵照PowerBuilder語法規範,且用分層縮進的寫法突出顯示嵌套的層次結構,例如:
For i = 1 To 100
For j = 1 To 50 
For k = 1 To 200 
Matrix[i,j,k]=1
Next
Next
Next

*註釋及格式要求
註釋老是加在程序中須要歸納性說明或不易使人理解或容易使人理解錯的地方。註釋語言應簡練、易懂而又準確,所採用的語種首選是中文,若有輸入困難或特殊需求也可採用英文。

註釋原則:
a.函數或過程的註釋
(1)在函數頭部必須說明函數的功能和參數(值參、變參);
(2)在函數的主體部分,如算法複雜時,應以註釋的方式對其算法結構作出說明;
(3)函數申請過全局資源且有可能致使資 源緊張應加以註明(如內存和文件柄等);
(4)函數有反作用必定以十分醒目的方式(如加!號等)註明。
b.語句的註釋
(1)應對不易理解的分支條件表達式加註釋;
(2)不易理解的循環,應說明出口條件(有GOTO的程序還應說明入口條件);
(3)過長的函數實現,應將其語句按實現的功能分段加以歸納性說明。
c.常量和變量的註釋
在常量名聲明後應對該名作適當的註釋,註釋說明的要點是:
(1)被保存值的含義(必須) ; 
(2)合法取值的範圍(可選);
(3)全局量須要對以上逐點作充分的說明。
d.制定對象的註釋
每一個開發人員針對本身所制定的窗口、菜單、數據窗口、數據管道和用戶對象等添加註釋,要點是:
(1)標註對象的用途;
(2)標註對象的制定人員;
(3)標註時間或者修改時間。

具體格式要求以下:
1. 在窗口Open事件前應說明
/* ======================================================= */
// 窗口中英文名稱:
// 窗口做用:
// 做者:
// 日期:
/* ======================================================= */

2. 在事件腳本(Script)以前應說明
/* ======================================================= */
// 腳本做用:
// 輸入參數及數據類型:
// 返回參數及數據類型:
// 全局函數及其用途:
// 全局變量及其用途:
// 做者:
// 日期: 
// 修改人的姓名:
// 修改日期:
// 修改緣由:
/* ===================================================== */
如有多人修改,每一個人均加上本身的註釋,而不能改他人的姓名、日期、緣由,對要修改的腳本,只能註釋不能刪除,而且在修改的地方加上修改人名、日期和"Beginning Modification... ","EndingModification"字樣。

3. 腳本中的註釋
單行腳本程序註釋:
// 註釋文本 
腳本的程序段註釋:
/* ================================== */
//
// 註釋文本
//
/* ================================== */
變量的註釋以下:
數據類型 變量名 //註釋

4. 在函數、存儲過程等腳本(Script)以前應說明
/* ======================================================= */
// 函數名稱:
// 參數解釋:
// 功能描述:
// 調用舉例:
// 最初做者:
// 編寫日期:
// 返 回 值:
// 變量狀況:
// 修 改 人:
// 修改日期:
// 修改緣由:
/* ======================================================== */


*Powerbuilder腳本編程規範

1. Powerbuilder編程注意事項
a.不要在子應用中聲明全局變量!如必須聲明全局變量,則應事先向項目負責人申請。
b.供別的文件或函數調用的函數,毫不應使用全局變量交換數據。
c.全部SQL語句均需判斷返回結果(包括SELECT,COMMIT語句)。
例:
If sqlca.sqlcode = -1 Then
錯誤處理程序
跳出
Else
正常
End If
d.缺省SQLCA的鏈接語句connect,在應用Open事件中完成,其disconnect在主應用的Close事件中完成,其他任何pbl中均不能有disconnect語句。
e. 因爲要鏈接多個數據庫,須要用Create建立對象,好比:SQLSYB,則用 connect using SQLSYB,處理完畢後用 disconnectusing SQLSYB,而且用 destroy SQLSYB釋放資源。

2. 編碼標準
(1)在代碼塊先後留一個空行。例子以下:
If <condition1> Then
<statementblock>
End If

For <varname>=<start> To <End> Step <increment>
<statement_block>
Next
(2)把單行註釋與當前script程序的縮進位置對齊:
//This is a comment For condition1
If <condition1> Then
//This is a comment For condition2
If <condition2> Then
//This is a comment For action1
<action1>
End If
End If
(3)縮進應以Tab鍵實現,不得采用空格。
(4)變量採用小寫格式。注意:
① 變量所有用小寫;
② 一個變量一行,每一個變量必須註釋;
③ 一般狀況下,變量的後半部分儘可能用數據庫字段名;
④ 變量聲明所有在腳本以前聲明完畢;
⑤ 全部變量聲明時按代碼功能段 + 變量類型進行排序。例如:
Long ll_quantity
String ls_name 
對象名採用小寫,屬性、關鍵字、保留字和內置函數均用首字母大寫格式:
w_cont_de.Visible = True
m_mdi.m_file.m_print.Enabled = False
數據窗口控制的函數加上修飾,而不以數據窗口對象做爲參數:
dw_main.SetTransObject(sqlca)
dw_main.SetRowFocusIndicator(Hand!)
dw_main.Retrieve()
(5)當鏈接起來的字符串超過了兩行的長度時,使用 + 符做爲下行的第一個字符,每次均採用縮進格式。字符串的隨後部分應該再次縮進。例如:
ls_msg = "鏈接數據庫失敗!錯誤信息爲:~r~n" &
+ Sqlca.SqlErrText &
+ "請與系統管理員聯繫" 
(6)PowerBuilder保留字(關鍵字)首字母大寫其他小寫,這樣看起來層次清晰,如:This,Parent,ParentWindow,True,False,Return,Halt與Close。
(7)PowerBuilder內部函數及屬性每一個字首字母大寫其他小寫,這樣看起來層次清晰,如:sle_user.Text,dw_1.SetTransObject(Sqlca),Sqlca.SqlErrText。
(8)SQL語句按以下格式書寫:
SELECT name,sex,dept_id
INTO :ls_name,:ls_sex,:ls_dept_id
FROM employee
WHERE emp_id = :ls_emp_id ;
(9)程序中應避免出現 goto 跳轉語句。

3. 腳本中一些經常使用功能模塊的編程約定
(1)光標操做過程的編程約定以下:
Declare Cursorname Cursor for 
Select語句
Open Cursorname; 
fetch Cursorname into <variables>
Do While Sqlca.Sqlcode = 0
<statementblock>
fetch Cursorname into <variables> 
Loop 
Close Cursorname
光標命名規則:「Cur」 + 「_」 + 名稱。 
(2)調用數據庫存儲過程的編程約定以下:
declare Procedurename procedure For StoredProcedureName
:Value1,:Value2......;
execute Procedurename;
fetch Procedurename into <variables>;
close Procedurename;
commit;
存儲過程命名規則:「Pro」 + 「_」 + 名稱。
有些系統存儲過程(例如:sp_droplogin)不能當作一個事務提交,爲了執行它,就必須先置事物對象的AutoCommit屬性爲True,當存儲過程執行完畢後再將事務對象的AutoCommit屬性置爲False。
(3)在每個SQL語句以後必須判斷SQL語句執行成功與否,成功則繼續,不成功則作相應處理並給出一條提示信息。
If Sqlca.SqlCode <> 0 Then
Rollback ;
MessageBox("錯誤信息","操做失敗!")
Else
Commit;
MessageBox("提示信息","操做成功!")
End If
(4)全部操做符(包括等號)先後應留一空格,使程序看起來更清晰。例如:
ls_msg = ls_title + ls_error
(5)僅當絕對須要時纔在循環結構體中使用函數調用,也就是說,僅當函數的返回值依賴於循環迭代的值時才使用函數調用。
使用以下方法:
Long ll_num_selected
ll_num_selected = lb_devctg.TotalSelected()
For i = 1 To num_selected
……
Next
不使用下述方法:
For i = 1 To lb_1.TotalSelected()
……
Next

4. PB中的任何一個窗口都要有註釋說明
通常在窗口的Open事件中對窗口的功能進行全面的介紹,以便維護人員能夠很清楚地知道窗口的功能和維護要點。其格式可參見前面的說明。

5. 表的操做
在程序中涉及多個表的操做時,需嚴格按照各項目組「表操做順序一覽表」規定的順序對錶進行操做,以防發生鎖表現象。


**控件編程規範

*公共部分
a.應儘可能爲全部控件使用有意義的名稱,重要控件不容許使用 pb_1 之類無明確意義的名稱。
b.大號字體:各窗口控件字體爲Arial,字號爲12號,字色爲黑色。小號字體:各窗口控件字體爲宋體,字號爲9號,字色爲黑色。
c.顯示控件和輸入控件底色分開,顯示控件爲灰色(窗口顏色),輸入控件爲白色。
d.輸入區和顯示區分別放置。
e.按鈕排列緊湊,在窗口右側縱向排列時靠上放置;在窗口下方排列時靠右放置,由於左撇子操做者畢竟是少數。
f.各字符類控件對齊方式爲左對齊;數字類控件爲右對齊,且必須按所需格式設置Format 屬性;日期控件必須保證能完整顯示所需日期格式,應用yyyy-mm-dd風格。及有前導0的形式(避免2000年問題),可採用左對齊或中對齊。
g.CommandButton控件的推薦高度爲104。

*控件細則

1. 靜態文本框
靜態文本框命名規則:st + '_' + 名稱(若爲label可不更名)。
外觀規定以下:
背景色:buttonface;
前景色:黑色;
邊 框:無;
高 度:72。
建議在其後加上全角冒號(:)。

2. 單行編輯框
單行編輯框命名規則:sle + '_' + 名稱。
(1)外觀
背景色:白色;
前景色:黑色;
邊 框:3D Lowered;
高 度:72。
(2)程序說明
a.響應事件建議自定義 Keydown 事件,儘可能不要用Modify 事件。
b.當得到焦點時控件背景變爲深藍色,字體顏色變爲***,失去焦點時還原缺省顏色。

3. 命令按鈕
命令按鈕命名規則:cb + '_' + 名稱
(1)外觀 
高度:對於小號字體(宋體9號)爲92;
對於大號字體(Arial 12號)爲108。
寬度:對於小號字體(宋體9號)爲325;
對於大號字體(Arial 12號)爲402。
(2)說明
命令按鈕控件不要使用 cb_1 之類無明確意義的名稱(尤爲在窗口中這類控件比較多時,可能使人分不清各個控件的做用)。

4. 圖像按鈕
儘可能不用圖形按鈕,而用命令按鈕。
圖像按鈕命名規則: pb + '_' + 名稱。
外觀規定以下:
尺寸:用圖像原始尺寸;
圖像:按鈕的有效與無效採用不一樣的bmp圖像以示區別。

5. 複選框
複選框命名規則:cbx + '_' + 名稱
外觀規定以下:
背景色:buttonface;
前景色:黑色;
邊 框:3D Lowered;
高 度:92;
位 置:標籤在右。

6. 單選按鈕
單選按鈕命名規則:rb + '_' + 名稱。
(1)外觀
背景色:buttonface;
前景色:黑色;
邊 框:3D Lowered;
高 度:92;
位 置:標籤在右。
(2)程序說明
單選按鈕最好與組框配合使用。

7. 組框
組框命名規則:gb + '_' + 名稱。
外觀規定以下:
背景色:buttonface;
前景色:黑色;
邊 框:3D Lowered。

8. 屏蔽編輯框
屏蔽編輯框命名規則:em + '_' + 名稱。
(1)外觀
背景色:白色;
前景色:黑色;
邊 框:3D Lowered。
(2)程序說明
a.響應事件建議用自定義 Keydown 事件,儘可能不要用Modify 事件。
b.當得到焦點時控件背景變爲深藍色,字體顏色變爲***,失去焦點時還原缺省顏色。

9. 下拉列表框
下拉列表框命名規則:ddlb + '_' + 名稱。
外觀規定以下:
背景色:白色;
前景色:黑色;
邊 框:3D Lowered。

10. 應用
應用命名規則:app + '_' + 應用名。
爲應用選擇一個圖標,以便在運行時標識應用。
在 Open 事件中聲明 SQLCA 全局變量和打開應用主窗口。
在 Closequery 事件中編寫退出應用以前的處理程序。
在 SystemError 事件中編寫系統出錯的處理程序。

11. 窗口
窗口命名規則: w + '_' + 窗口名。
主窗口採用 main 窗口類型,子窗口通常採用 Popup 窗口類型,無控制菜單,無最大化最小化按鈕,不可改變大小。若爲通常性提示窗口,用 response 窗口類型。
窗口以 buttonface 顏色爲背景顏色。
重要的菜單選項設置 Toolbar 功能。
窗口上下左右四周應至少留出兩個網格,而不得將對象填滿整個窗口!

12. 菜單
菜單命名規則: m + '_' + 菜單名。
菜單項 MenuItem 的名稱以該菜單項在整個菜單中的物理位置分層次命名。
例:若 MenuItem 位於整個菜單的第三列第二行,則命名爲m_32。
或文件菜單下的「關閉」菜單項,則命名爲 m_file_close。

13. 數據窗口對象
數據窗口對象命名規則:d + '_' + 功能含義。
打印用數據窗口背景色爲白色,題目爲16號字,內容爲11號字,顯示比例爲75%。
顯示用數據窗口背景色原則上爲 buttonface,可視窗口製做是否美觀的實際狀況使用白色數據窗口各列顯示框高度爲 72。
Tabular和Grid風格數據窗口,無表頭時列名文本邊框爲3DRaised。Detail區爲3D Lowered,背景色原則上爲白色。Grid風格數據窗口通常不出現線條。

14. 數據窗口控件
數據窗口控件命名規則:dw + '_'+ 功能含義。
數據窗口邊框原則上爲 3D Lowered,也可酌情使用none 外加 group。

15. 用戶對象命名
用戶對象命名規則:uo + '_'+ 功能含義。
公共對象對應以上各控件規範製做。


**用 戶 反 饋

在系統中對用戶的操做及時地提供反饋信息是十分重要的,這些反饋信息也許只是像警告鈴或將鼠標顯示成沙漏等同樣不起眼的反應,可是卻能使用戶樹立信心,使他感到仍在控制軟件而沒有死機。

*使用反饋的場合 
在客戶/服務器環境下用戶最不能忍受的是系統反應速度慢,而在實際的應用中卻會常常遇到計算機須要比較長的時間執行一個或一批操做。在這種狀況下,應加入反饋,讓用戶瞭解應用正在作什麼。好比:
a.在需等待時間較短(0~10秒)的狀況下應將鼠標顯示成爲沙漏,爲此可調用函數SetPointer(HourGlass!)來實現這一功能;
b.在處理時間需10~18秒時,由微幫助來顯示處理進度;
c.當處理時間需18秒以上時,要顯示這個處理窗口或顯示進度條;
d.當一個長時間的處理完成後應發出一個提示警告聲如Beep(1),這樣用戶就沒必要總看着屏幕。

*提供反饋的幾種技術手段

1. 微幫助 
微幫助是MDI(多文檔界面)框下面的狀態條中的文字。窗口底部的微幫助通常有兩個做用:一是在用戶選擇菜單項或其餘窗口控件時,顯示更多的文字信息來解釋或提示用戶所要進行的操做是什麼;另外一個用途是系統在處理過程當中顯示正在進行的工做狀態,以使用戶瞭解系統的處理進度,從而免去對死機的擔憂。

2. 工具條的幫助 
當鼠標停留在某一個工具條上時,會出現一個彈出式信息框,在PowerBuilder 4.0以上的版本中,缺省顯示的是工具條文字。也能夠用菜單畫筆在工具條文字以後加一個逗號,加入一段更長的文字來定義一個不一樣的工具條說明。例如,鍵入「退出,關閉應用」,將看到在帶文字的工具條圖標上顯示的文字是「退出」,而彈出的信息框顯示的是「關閉應用」。

3. 聲音提示 
在用戶可能進行破壞性操做時,用聲音及時提出警告是必要的,可是不能濫用,由於當用戶沒法正確操做軟件或作了不但願作的事情時,聽到警告聲反而會更加煩惱,所以要慎重使用這種反饋方法。此外,在一個長處理結束時使用聲音反饋 ( 如警告聲或小段悅音)也是必要的。


**提升程序的健壯性
統一的外觀; 
引用對象前的有效性檢驗; 
使用正確的數據窗口列名; 
使用適當的GUI控件來使得用戶輸入有效; 
須要時對數據窗口的列作保護; 
提交前對數據窗口列作約束檢驗; 
避免用戶進入危險地帶; 
對用戶不經意的操做作出提示。


**文檔標準
文檔不只包括應用系統的設計文檔,還包括源程序的相關注釋及幫助文檔等


**錯誤處理標準
對錯誤的處理和狀態監測程序實行標準化
如下幾個方面的檢查能夠考慮用標準的方法處理:
聯結錯誤;
數據庫存取錯誤;
數據錄入錯誤;
程序執行錯誤。


**其餘
應用開發中儘可能使用過去已經開發好的模塊。
使用面向對象編程中的繼承特性。
使用PowerBuilder以外的輔助開發工具:設計工具;版本控制工具;測試工具。

轉載地址:http://blog.csdn.net/u012369435/article/details/36422725

相關文章
相關標籤/搜索