ASP.NET编程规范

第一部分:界面设计标准

 

1.开发环境设置:屏幕设置为800*600/1024*768

 

2.界面设计原则:风格必须统一

 

3.B/S结构开发原则:使用框架/模板

 

4.页面使用表格(Table)进行格式设置。

 

最外面的表格设置:width=778px align=center border=0

 

5.主页面Body设置:bgcolor="#cccccc"

 

6.框架子页面Body设置:bottomMargin="0" leftMargin="0"

 

7.对齐:文字(标签)右对齐;数字(数据)右对齐;文字(数据)左对齐,比较短的可以居中对齐;金额,需加上   千位符

 

8.冒号必须是在中文输入状态下键入

 

9.控件使用原则:尽可能使用Html控件,需要提交而又不用在客户端使用Javasrcipt的可以使用Web控件

 

10.控件使用约定:

 

(1)控件外观设置:style.css

 

i.i 链接类:

 

    a:link {font-size: 12px;line-height: 20px;text-decoration: none; color: #666666}

 

     a:visited {font-size: 12px;line-height: 20px;color: #666666;text-decoration:

 

       none;}

 

     a:hover {font-size: 12px;line-height: 20px;color: #FF6600;text-decoration:

 

       underline;}

 

     a:active {font-size: 12px;line-height: 20px;color: #666666;text-decoration:

 

       underline;}

 

i.ii 表格类:

 

              td{font-size: 12px; line-height: 20px; text-decoration: none;}

 

         i.iii 文本框类:

 

              .inputPM{BORDER-RIGHT: #99ccff 1px solid; BORDER-TOP: #99ccff 1px solid;

 

                       BORDER-LEFT: #99ccff 1px solid; BORDER-BOTTOM: #99ccff 1px solid;

 

                       HEIGHT: 22px}

 

        i.iv datagrid类:

 

            .dg_grid      /* Grid-总体 */

 

{font-size:12px; border-style:solid; border-width:2px; border-color:White;

 

               text-align:center; vertical-align:middle;}

 

.dg_header         /* Grid-页眉 */

 

{font-weight :bold ; color:#E7E7FF; background-color :#3366CC; text-align:center;

 

               vertical-align:middle; height:25px;}

 

.dg_alter     /* Grid-交替行 */

 

{background-color :AliceBlue; height:22px;}

 

.dg_item      /* Grid-普通行 */

 

{color :Black; background-color:WhiteSmoke; height:22px;}

 

.dg_page      /* Grid-页导航 */

 

{color:Black; text-align:right; vertical-align:middle; height:22px;}

 

            .dg_select{font-weight :bold ; color:White; background-color :#9471DE;} /* Grid-选择行 */

 

(2)几点补充:

 

ii.i   控件datagrid的数据显示:文字(短)居中对齐;文字(长)左对齐;日期左对齐;数字左对齐;金额左对齐,千位符

 

ii.ii  控件text的长度MaxLength按数据结构要求设置

 

ii.iii 因为操作主要跟数据库相关,所以控件类型可以与数据表字段(field)类型形成对应,此处约定为:

 

u       字段类型为文本、数字时,控件使用文本框

 

u       字段类型为布尔值时,控件使用单项选择按钮(checkbox控件)或下拉框

 

u       字段内容在固定的几个值中选择时(不论其类型),控件使用下拉框

 

u       字段类型为日期时间时,控件使用文本框+按钮(按钮可以选择日期,按钮.Value=”…”)

 

u       字段为其它表的外键,则分为两种情况:

 

a)、如果是属于基本资料的,控件使用下拉框。

 

b)、如果不是属于基本资料的,控件使用文本框+按钮(按钮用于跳出查询窗口,按说钮.Value=”…”

 

u       数据操作窗口一般为DataGrid+录入框

 

a)、DataGrid用于显示数据

 

b)、录入框用于输入/显示数据

 

c)、浏览窗口基本样式,主要以表格形式显示纪录,单表控件使用DataGrid/DataList/Repeater,多表使用NestedDataGrid

 

第二部分:命名规范

 

1.  按钮ID命名:btn+按钮操作功能(如btnSave)

 

2.  其它控件:

 

I.    与数据操作相关:其ID<.SPAN>为相应的字段名称,如果有多个控件对应一个字段,则按以下规范命名:

 

字段名+”_”+顺序号(以01开头)

 

例子:页面有一TextBox控件,对应着数据库表中的RightGroup字段,则其ID应命名为 RightGroup

 

如果页面有二个TextBox控件,都对应着数据库表中的PowerGroup字段,则其ID分别命名为PowerGroup_01, PowerGroup_02,依此类推

 

II.  其它:前缀+用途功能(如txtInput),前缀请看表一:

 

 

 
 
 

控件
 
 

前缀
 
 

控件
 
 

前缀
 

 
 

Form
 
 

frm
 
 

Class
 
 

cls/C
 

 
 

Module
 
 

mod
 
 

Label
 
 

lbl
 

 
 

LinkLabel
 
 

lnk
 
 

Button
 
 

btn
 

 
 

TextBox
 
 

txt
 
 

CheckBox
 
 

chk
 

 
 

RadioButton
 
 

rad
 
 

GroupBox
 
 

grp
 

 
 

PictureBox
 
 

pic
 
 

DataGrip
 
 

grd
 

 
 

ListBox
 
 

lst
 
 

CheckedListBox
 
 

clst
 

 
 

ComboBox
 
 

cbo
 
 

TreeView
 
 

tvw
 

 
 

ListView
 
 

lvw
 
 

TabControl
 
 

tab
 

 
 

DateTimePicker
 
 

dtp
 
 

Timer
 
 

tmr
 

 
 

Splitter
 
 

spl
 
 

ProgressBar
 
 

pbar
 

 
 

RichTextBox
 
 

rtf
 
 

ImageList
 
 

imgl
 

 
 

ToolBar
 
 

tlb
 
 

MenuItem
 
 

mnu
 

 


              (表一)

 

3.  变量及常量命名规范:

 

I.     页面及过程级变量:级别标识+数据类型前缀+<名词|名词组合>

 

A、 页面级变量:级别标识为m (例子:dim mstrNewline as string)

 

B、 过程级变量:级别标识为 l (例子:dim lstrNewline as string)

 

II. 页面间变量:采用request传递获取

 

命名原则:级别标识+数据类型前缀+<名词|名词组合>

 

                级别标识为p

 

例子:url=”XXXX.aspx?pstrLine=bbbbb&pintNum=11”

 

           Dim lstrLine as string=Request(“pstrLine”)

 

           Dim lintNum as integer=request(“pintNum”)

 

III.              全级变量:级别标识+数据类型前缀+<名词|名词组合>

 

A、 级别标识:g(例子:dim gstrNewline as string)

 

B、 因为在所有的页面都能使用,所以须有足够长的名称以说明变量,并加上注释

 

C、 统一在模块中定义

 

D、全级变量的定义必须经过项目主管的同意后才能进行

 

IV.              通用变量:采用session赋值

 

a、 命名原则:级别标识+数据类型前缀+<名词|名词组合>

 

b、  级别标识为g(例子:session(“gstrNewline”)=””)

 

c、  因为在所有的页面都能使用,所以须有足够长的名称以说明变量,并加上注释

 

d、  通用变量统一放在Global.asax中的Session_Start(sender,e)过程中,初始值赋予空字符串。并在Session_End(sender,e)过程中释放掉。

 

例子:

 

Global.asax文件:

 

 

 

Sub session_star(byval sender as Object,byval e as EventArgs)

 

    Session(“gstrUser”)=””

 

End sub

 

 

 

Sub session_End(byval sender as Object,byval e as EventArgs)

 

    Session(“gstrUser”)=nothing

 

End sub

 

e、 通用变量的定义必须经过项目主管的同意后才能进行

 

V.   数据类型前缀:

 

 

 
 
 

数据类型
 
 

前缀
 
 

数据类型
 
 

前缀
 

 
 

String
 
 

str
 
 

Date
 
 

dat
 

 
 

Boolean
 
 

bln
 
 

Short
 
 

sht
 

 
 

Decimal
 
 

dec
 
 

Long
 
 

lng
 

 
 

Integer
 
 

int
 
 

Byte
 
 

byt
 

 
 

Char
 
 

chr
 
 

Single
 
 

sgl
 

 
 

Double
 
 

dbl
 
 

Structure
 
 

udt
 

 
 

Object
 
 

obj
 
 

DataSet
 
 

ds
 

 
 

DataRow
 
 

dr
 
 

OleDbConnection
 
 

conn
 

 
 

SqlConnection
 
 

conn
 
 

OleDbCommand
 
 

cmd
 

 
 

SqlCommand
 
 

cmd
 
 

OleDbDataAdapter
 
 

da
 

 
 

SqlDataAdapter
 
 

da
 
 

OleDbDataReader
 
 

rdr
 

 
 

SqlDataReader
 
 

rdr
 
 

Crystal Report
 
 

rpt
 

 


       (表二)

 

4.  过程(函数)命名规范:

 

I.     命名规范:级别标识+<动名词结构>

 

II.  应用于单一页面:级别标识为p(例子:private function pDisdata())

 

III.              应用于全部页面:级别标识为g(例子:public function gDisdata())

 

5.  页面命名规范:模块标识+程序功能英文缩写

 

I.     例子:有基本资料模块,其模块标识为Base,程序使用的英文缩写为Unit,则页面名称为BaseUnit

 

II.  此命名只能由项目主管或系统分析设定

 

6.  存储过程命名规范:

 

I.     命名规范:[项目名称前的两个字母]+[程序使用英文缩写]+[_]+[存储过程功能标识]

 

II.  如果项目名称是大写,则转换为小写

 

III.              例子:项目名称为DKERP,程序作用的英文缩写为Unit,存储过程的功能是保存,则可命名为dkUnit_Sav

 

IV.              存储过程功能标识约定:

 

u       存储过程功能为保存的,其标识为Sav

 

u       存储过程功能为删除的,其标识为Del

 

u       存储过程功能为查询的,其标识为Qry

 

u       存储过程功能为填充到控件的,其标识为Back

 

u       存储过程功能为绑定下拉框控件的,其标识为Dll

 

V.   存储过程命名与规划必须经过项目主管的同意后才能进行

 

7.  类的命名规范:

 

I.     原则:[Cls]+<名词|名词组合|动名词组合>,名词|动词的第一个字母大写

 

II.  例子:ClsDataOperate

 

III.              公共类的定义与命名必须经过项目主管的同意后才能进行

 

8.  模块的命名规范:

 

I.     原则:[Mod]+<名词|名词组合|动名词组合>,名词|动词的第一个字母大写

 

II.  例子:ModDataConnection

 

III.              公共模块的定义与命名必须经过项目主管的同意后才能进行

 

9.  用户控件命名规范:

 

I.     原则:[Url]+ <名词|名词组合|动名词组合>,名词|动词的第一个字母大写

 

II.  例子:UrlDataLoad

 

III.              用户控件的定义与命名必须经过项目主管的同意后才能进行

 

第三部分:编码规范

 

1. 注释

 

A.       每个页面的开始必须有下面格式的注释

 

’*********************************************

 

'页面名称:              frmStyleE

 

'作用/描述:             款式查询

 

'输入/发送:

 

'    strUserList():     被搜索的用户列表。

 

'    strTargetUser:     要搜索的用户名。

 

'输出/返回格式:         在rasUserList 数组中rsTargetUse的第一次出现的索引。

 

'                        如果目标用户没找到,返回-1。

 

'原作者:                Raymnod Fok 2002-1-1

 

'原作日期:             

 

'修改者:               

 

'修改日期:             

 

'备注:                 

 

'************************************************

 

注:左对齐,中间隔开4个Tab位(每个Tab缩进4位)

 

B.        所有变量及常量均要有注释

 

C.        每个过程(函数)也应该有注释,以描述这个过程(函数)的功能,以下是注释的格式

 

'***********************************************

 

'函数名称:             intFindUser

 

'目的:                 在用户列表数组中找出一个指定用户的第一次出现位置。

 

'输入/发送:           

 

'   strUserList():     被搜索的用户列表。

 

'   strTargetUser:     要搜索的用户名。

 

'输出/返回格式:        在rasUserList 数组中rsTargetUser的第一次出现的索引。

 

'                       如果目标用户没找到,返回-1。

 

'参数:                 intCol 需要获得内容的当前文本

 

'原作者:               Raymnod Fok 2002-1-1

 

'原作日期:            

 

'修改者:              

 

'修改日期:            

 

'备注:                

 

'************************************************

 

Function pintFindUser (strUserList() As String, strTargetUser As String)As Integer

 

           Dim i As Integer           ' 循环计数器。

 

                   Dim blnFound As Integer    ' 目标寻找标志。

 

                           intFindUser = -1

 

                          i = 0

 

                          While i <= Ubound(strUserList) and Not blnFound

 

                               If strUserList(i) = strTargetUser Then

 

                                   blnFound = True

 

                    intFindUser = i

 

                               End If

 

                          Wend

 

End Function

 

D.       过程(函数)或存储过程内部的注释方法

 

应按功能块分,注释应写在每一小段算法或一个小功能之前,不要与代码、注释搞成一团

 

E.        若是在程序代码后面写上注释,则在代码语句后面三个Tab位开始写注释

 

F.        如果注释是针对程序中的部分代码,需注明该段代码的开始和结束部分

 

G.       存储过程也应该写上注释,以下是存储过程注释的格式

 

/*

 

存储过程名:                        TSellMain_Qry

 

作用:查询表                        Sell_SellRecordMain的数据

 

输入:                                 

 

输出:表                               Sell_SellRecordMain的所有数据

 

原作者:                               quanysq

 

日期:                                 

 

修改者:                              

 

修改日期:                          

 

备注:                                 

 

*/

 

CREATE PROCEDURE TSellMain_Qry

 

AS

 

select * from Sell_SellRecordMain

 

GO

 

 

 

2. 格式化代码

 

A.      嵌套块应有严格的层次缩进(每一层分别缩进1个Tab,注:每个Tab为4个英文字符)

 

B.        一个过程或函数不能太长,大致上应限制在200行内,否则应将其拆分为多个过程或函数

 

C.        当产生长字符串时,使用下划线连接字符产生多行代码

 

D.       对数据库进行访问数据库、保存、删除、显示数据等操作时,统一使用公用类。

 

E.        在制作界面时,要对照标准,做到界面与流程要求达到一致,界面也要符合标准的规范

 

F.        在读取数据显示到界面时,要对照流程的要求与数据库中的表和字段的有效性了解清楚,做到显示的数据完全正确

 

G.       在处理操作界面数据时,要对照数据库中数据有效性达到一致,数据与流程达到一致,并保证数据有效。数据要合理性(如:数量应该小于0或大于0,小数点等等)

 

H.        在保存数据处理中,要做到所见即所得,就是保存的数据要与界面数据相一致,并对照流程切保数据符合流程的要求。

 

I.          在读取数据显示到界面、界面数据操作、保存数据操作要多使用过程或函数,尽量减少控制点,使程序系统化

 

J.         对于变量的命名,切记要规范

 

K.        在程序中要多加注释,使程序更加清楚

 

L.        在退出页面时,必须在Page_Disposed(sender,e)事件中释放掉会驻留在内存的变量,主要是Session变量、DataSet变量

 

M.      流程图必须简要地规划出程序的流程,其中列出实现该功能的模块的名称

 

N.       流程图命名:与程序名相同

 

O.       TextBox 控件的Enabled属性为False时,其背景颜色必须设为灰色(颜色名称: Silver)

 

P.        切换当前的控件,除了VB.net本身默认的Tab键外,再加上Enter键

 

Q.       关于并发控制,一般采取事务+锁的方式处理,有三种情况:

 

a.    锁定整个表,通常发生在查询大量数据时,使用TABLOCKX提示.

 

示例:

 

CREATE PROCEDURE TSellMain_Qry

 

       AS

 

               Begin transaction

 

                     select * from Sell_SellRecordMain with (TABLOCKX)

 

                      if @@ERROR > 0

 

                             ROLLBACK

 

                      Else

 

                             COMMIT              ----提交或回滚事务时释放锁

 

GO

 

b.       在更新表中所有记录时申请排它锁,防止在提交事务之前记录受其他用户的影响.

 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

 

示例:

 

CREATE PROCEDURE Ttesthr_Update

 

       AS

 

               Begin transaction           --开始事务

 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE                   --申请排它锁,防止在提交事务之前记录受其他用户的影响

 

                     Update testhr set hrcode=’aaa’

 

                      if @@ERROR > 0

 

                             ROLLBACK

 

                      Else

 

                             COMMIT              ----提交或回滚事务时释放排它锁

 

GO

 

c.       如果只是更新表中一行或者多行记录时使用行级锁.

 

With (RowLock)

 

示例:

 

CREATE PROCEDURE Ttesthr_Update

 

       AS

 

               Begin transaction           --开始事务

 

                     Update testhr with (rowlock) set hrcode=’aaa’ where hrcode=’bbb’

 

                      if @@ERROR > 0

 

                             ROLLBACK

 

                      Else

 

                             COMMIT              ----提交或回滚事务时释放排它锁

 

GO

 

R.        程序中处理错误一般使用以下结构

 

try

 

        …代码

 

catch

 

        …错误信息

 

finally

 

        …释放有可能驻留在内存中的变量

 

end try

 

第四部分:测试规范

 

1.  在测试前,以概要设计说明书.详细设计说明书作为总的提纲,选择合适的输入输出数据.

 

2.  按功能模块分别测试

 

3.  在测试过程中,首先需要对各子单元过程进行测试,在各子单元过程测试完毕后,再对各模块(包括各子单元过程之间的接口)进行测试,处理好各模块之间的接口,最后对系统进行测试和维护。

 

4.  测试中需要加以注意的问题:

 

a.       数据类型不匹配.

 

如:   姓名         string             旅行目的地   string

 

       性别         string             旅行时间     date

 

       工作单位     string             (年/月/日   yy/mm/dd)

 

       身份证号码   long int           定票/取票     boolean

 

b.       数据超出规定范围

 

如:性别只能是‘男’或‘女’;身份证号码按规定必须是13位;旅行时间必须在定票的当天过一天以后; 等等

 

c.       数据库限定必须输入的在程序中有没有检验?

 

d.       数据库限定值为唯一的在程序中有没有检验?

 

e.       控件datagrid的分页程序是否已写好,有没有检验?

 

f.        控件datagrid各列的宽度是否已分配好?

 

g.       链接是否正确?

 

h.       代码是否已经简洁,会不会留下一些安全隐患?

 

i.         其它意料之外有没有一定的预防代码?

 

j.         是否符合需求?需求是否明确?

 

5.  测试原则:如果不能让自己满意的程序,他人也一样不会满意

posted @ 2006-09-27 17:24  '.Elvis.'  阅读(185)  评论(0编辑  收藏  举报