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. 测试原则:如果不能让自己满意的程序,他人也一样不会满意

来源:http://www.cnblogs.com/mayingbao/archive/2007/01/30/634118.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H5页面适配iOS、Android和微信

前言 本文章针对H5开发的单页全屏无滚动页面。 解决方案 整体采用vw、vh作为基本单位&#xff0c;采用flex布局&#xff0c;针对字体使用rem单位。 多终端适配 针对app包下载等业务场景&#xff0c;需要识别对应的终端&#xff0c;采用不同的地址下载。针对微信特定情况&a…

代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素

239. 滑动窗口最大值 题目链接&#xff1a;239. 滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 文章讲解…

sql server 2005 COUNT_BIG (Transact-SQL)

返回组中的项数。COUNT_BIG 的用法与 COUNT 函数类似。两个函数唯一的差别是它们的返回值。COUNT_BIG 始终返回 bigint 数据类型值。COUNT 始终返回 int 数据类型值。后面可能跟随 OVER 子句。 Transact-SQL 语法约定 语法 COUNT_BIG ( { [ ALL | DISTINCT ] expression } | * …

Study on Android【五】--自定义ContentProvider的语义

Android做到现在。开始感觉到Android确实还是太年轻。系统本身好不够成熟&#xff0c;相关文档更是少的可怜。在Android的旅途中到处是暗坑陷阱&#xff0c;掉进去摔得半死&#xff0c;还只能靠自己琢磨着爬出来。想 在大部分工作集中在了定义一套ContentProvider以及上层的显示…

2021面试题整理

BFC是什么&#xff0c;怎么使用&#xff1f; 什么是BFC&#xff1f;看这一篇就够了 宏任务与微任务 async function fn1 () {await fn2()console.log(1); } async function fn2 () {console.log(2); } console.log(3);setTimeout(function(){console.log(4) },0); fn1(); new …

asp.net ajax技巧6

今天继续学习章立民的书。讲到两个updatepannel的嵌套。比如下面的例子<asp:ScriptManager ID"ScriptManager" runat"server" /> <asp:UpdatePanel ID"OuterPanel" runat"server" UpdateMode"Conditional&q…

js eventLoop

eventLoop详解 宏任务和微任务的一个小事 在此补充一点顺序&#xff1a; 宏任务&#xff1a;setTimeout > setImediate 微任务&#xff1a;process.nextTick > promise.then

MYSQL 如果把数据文件保存到其他磁盘里

有人问起分开存储数据文件的问题。现在写下来。为了突破磁盘搜索的瓶颈。我们要把MYSQL的数据和索引保存到其他不同的磁盘中。目前还只是支持MyISAM引擎。在MYSQL中&#xff0c;官这个叫象征性链接。1、在WINDOWS下的象征性链接。数据库目录&#xff1a;E:\LAMP\mysql5\data数据…

《浏览器播放RTSP方案》之 VLC插件播放RTSP视频流

VLC插件播放RTSP视频流多版本chrome安装安装vlc软件开启浏览器的NPAPI设置编写测试页插件设置其他问题最后目前网页对于RTSP流直接播放不支持&#xff0c;目前有插件和转流两种方式&#xff0c;这里针对vlc插件播放做一个简单的梳理。 查看官网教程 vlcWebPlugin, 得知其浏览器…

[导入]ASP常用函数:getIMG()

目前还是有BUG的,最新的测试页面在: http://www.reallydo.com/getimg.asp正则分析页面在: http://jorkin.reallydo.com/article.asp?id380 发现BUG请在后面留言,谢谢. 1.31修正src后面有空格不能正确匹配.已修正.src为空时出错.已修正.发现BUG: 图片路径有多个空格时只能保留一…

《浏览器播放RTSP方案》之 VXGPlayer插件播放RTSP视频流

VXGPlayer插件播放RTSP视频流 总体来说vxgplayer是付费插件&#xff0c;更多支持的功能可以去官网详询。作为一个demo研究&#xff0c;检索资料和实现总结如下&#xff1a; 环境搭建 别人有一篇文章总结的很好&#xff0c;就不赘述。直接上链接 整合vxgPlayer使chrome支持vx…

MYSQL优化考虑十个方面

1&#xff09;索引 2&#xff09;sql优化 3&#xff09;锁 4&#xff09;延迟 5&#xff09;参数优化 6&#xff09;连接数 7&#xff09;cpu 8&#xff09;iops 9&#xff09;磁盘 10&#xff09;内存 转载于:https://www.cnblogs.com/zeenzhou/p/11344485.html

vite + vue2 + eslint 项目配置

// npm 和 yarn 皆可&#xff0c;这里以 yarn 举例安装 vue2 环境 yarn create vite// 选择 framework: vanilla // 不选 vue&#xff0c;是因为vue默认是vue3// 自行安装环境 yarn add vite-plugin-vue2 vue-template-compiler -D yarn add vue vue-router vuex // 配置 vue …

初学 Delphi 嵌入汇编[29] - 寄存器所能接受的数值范围

譬如 EAX AX AH AL 四个储存器, 真实存在的其实只有一个 EAX, AX AH AL 不过是不同的访问方式.11111111 11111111 11111111 11111111 : EAX11111111 11111111 11111111 11111111 : AX11111111 11111111 11111111 11111111 : AH11111111 11111111 11111111 11111111 : AL//譬如 …

element form 自定义校验

element-ui 表单校验总结 作为一名前端开发&#xff0c;会遇到各种各样的表单处理。为了给用户更好的体验&#xff0c;行内表单校验及错误展示被广泛使用。由于工作中用到element-ui较多&#xff0c;所以这里简单谈一谈日常工作遇到的【有意思】的表单交互。 element-ui官网链…

通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转)

本文将讨论&#xff1a; • 缓存和 Forms 身份验证 • 视图状态和会话状态 • 配置文件属性序列化 • 线程池饱和 • 模拟和设置配置文件 本文使用了下列技术&#xff1a; .NET Framework、ASP.NET、Windows Server 2003 本页内容 LoadControl 和输出缓存会话和输出缓存Fo…

cocos2d-x 3.0 alpha1 生成Qt qch帮助文档

Qt的助手挺好用的. 比chm好多了 cocos2d-x使用doxygen生成文档. 默认生成的是html形式, 需要打开浏览器, 这个是比较耗资源吧 可以修改配置, 让doxygen同时输出qch形式的帮助文档 打开 \cocos2d-x-3.0alpha1\docs\doxygen.config 修改其中几项: GENERATE_QHP YESQHP_NAMESPA…

如何去掉DataTable中的重复行(新增.net 2.0中最新解决方法---简便)

.net 1.1中的解决方法(转)1建立一个DataSetHelper类(DataSetHelper.cs) publicclassDataSetHelper...{ public DataSet ds; public DataSetHelper(ref DataSet DataSet) ...{ ds DataSet; } public DataSetHelper() ...{ ds null; } p…

AngularJS中巧用ngModel的$asyncValidators属性写一个验证唯一性的Direcitve

有这样的一个需求&#xff1a;添加用户的时候&#xff0c;根据主键判断当前添加用户的email是否已经被使用。为此&#xff0c;我们需要把主键和email来传递给远程的一个API&#xff0c;让API返回结果&#xff0c;告之当前email是否被使用过。写一个验证email唯一性的Directive&…

ASP技巧:在Access数据库中重命名表

下面代码是用Adox重命名Access表名的示例代码&#xff1a; Dim Conn,ConnStr,oCat,oTbl ConnStr "ProviderMicrosoft.Jet.OLEDB.4.0;Data Source" & Server.MapPath("data.mdb") Set oCatServer.CreateObject("ADOX.Catalog") oCat.Active…