本文主要是介绍aspnet规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一部分:界面设计标准
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
链接类:
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;}
表格类:
td {font-size: 12px; line-height: 20px; text-decoration: none;}
文本框类:
.inputPM {BORDER-RIGHT: #99ccff 1px solid; BORDER-TOP: #99ccff 1px solid; BORDER-LEFT: #99ccff 1px solid; BORDER-BOTTOM: #99ccff 1px solid; HEIGHT: 22px}
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) 几点补充 :
1. 控件datagrid的数据显示:文字(短)居中对齐;文字(长)左对齐;日期左对齐;数字左对齐;金额左对齐,千位符
2. 控件text的长度MaxLength按数据结构要求设置
3. 因为操作主要跟数据库相关,所以控件类型可以与数据表字段(field)类型形成对应,此处约定为:
字段类型为文本、数字时,控件使用文本框
字段类型为布尔值时,控件使用单项选择按钮(checkbox控件)或下拉框
字段内容在固定的几个值中选择时(不论其类型),控件使用下拉框
字段类型为日期时间时,控件使用文本框+按钮(按钮可以选择日期,按钮.Value=”…”)
字段为其它表的外键,则分为两种情况:
a) 、如果是属于基本资料的,控件使用下拉框。
b) 、如果不是属于基本资料的,控件使用文本框+按钮(按钮用于跳出查询窗口,按说钮.Value=”…”
数据操作窗口一般为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 . 测试原则:如果不能让自己满意的程序,他人也一样不会满意
这篇关于aspnet规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!