附录一.Windows控件缩写规范
数据类型 |
数据类型简写 |
标准命名 |
Lable |
Lbl |
LblMessage |
LinkLable |
llbl |
LlblToday |
Button |
btn |
Btnsave |
TextBox |
Txt |
TxtName |
MainMenu |
mmnu |
MnnuFile |
CheckBox |
chk |
chkStock |
RadioButton |
rbtn |
RbtnSelected |
GroupBox |
gbx |
GbxMain |
pictureBox |
pic |
PicImage |
Panel |
pnl |
PnlBod |
DataGrid |
dgrd |
DgrdView |
ListBox |
cbo |
CboMenu |
TreeView |
tvw |
Tvw |
TabControl |
tctl |
tctlSelected |
DataTimePicker |
dtp |
dtpStartData |
HscrollBar |
hsb |
hsbImage |
VscrollBar |
vxb |
vsbImage |
Timer |
tmr |
tmrCount |
ImageList |
ilst |
ilstImage |
ToolBar |
Tlb |
tlbManage |
StatusBar |
stb |
stbFootPrint |
OpenFileDialog |
odlg |
odlgFile |
SaveFileDialog |
sdlg |
sdlgSave |
FoldBrowserDialog |
fbdlg |
fgdlgBrwser |
FontDialog |
fdlg |
fdlgFoot |
ColorDialog |
cdlg |
cdlgColr |
PrintDialog |
pdlg |
pdlgPrints |
|
数据类型 |
数据类型简写 |
标准命名 |
AdRotator |
Asrt |
Example |
Button |
Btn |
BtnSubimit |
Calendar |
Cal |
calMettingDatas |
CheckBox |
Chk |
ChkBlue |
CheckBoxList |
Chkl |
chkFavClors |
CompareValidator |
Valx |
valxDBCheck |
DataGrid |
Dgrd |
DgrdTitles |
DataList |
Dlst |
DlstTitle |
DropdownList |
Drop |
dropCountries |
HyperLink |
Lnk |
LnkDetail |
Image |
img |
ImgAuntBetty |
ImageButton |
ibtn |
IbtnSubmit |
Label |
Lbl |
LblResult |
LinkButton |
lbtn |
LbtnSubmit |
ListBox |
Lst |
LstCountries |
Panel |
pnl |
pnlForm2 |
PlaceHolder |
Plh |
PlhFormContens |
RadioButton |
Rad |
RadFemale |
RadioButtonList |
radl |
RadlGer |
RangValidator |
valg |
ValgAge |
Regular Expression |
vale |
valeEmail Vaildator |
Repeater |
Rpt |
ValrFirstName |
Table |
Tbl |
TblCountryCodes |
TableCell |
tblc |
TblcGermany |
TableRow |
tblr |
TblrCountry |
TextBox |
Txt |
TxtFirstName |
ValidationSummary |
vals |
valsFormError |
XML |
xmlc |
XmlcTranformResults |
|
数据类型 |
数据类型简写 |
标准命名举例 |
Connection |
Con |
ConNorthwind |
Command |
Cmd |
CmdReturnProducts |
Parameter |
Parm |
ParmProductID |
DataAdapter |
Dap |
DapProducts |
DataReater |
Dtr |
DtrProducts |
DataSet |
Ds |
DsNorthWind |
DataTable |
Dt |
DtProduct |
DataRow |
Drow |
DrowRow |
DataColumn |
Dcol |
DcolProductID |
DataRelation |
drl |
DrlMasterDetail |
DataView |
dvw |
DvwFilteredProducts |
数据类型 |
数据类型简写 |
标准命名举例 |
||
Bool |
b/is |
IsVisable |
||
Float |
F |
FPrice |
||
Double |
D |
DPrice |
||
Unit |
U |
Uage |
||
Int |
I |
iNumber |
||
Char |
Ch |
ChCode |
||
Byte |
Bt |
BtImages |
||
String |
Str |
StrName |
||
Struct |
St |
stStudents |
||
Windows |
Wnd |
WndMain |
||
AttayList |
Lst |
LstStudents |
||
Array |
Arr |
ArrStudents |
||
Hashtable |
Ht |
HtStudents |
|
类型 |
命名规范 |
注意事项 |
事例 |
类或结构 |
Pascal |
首字符大写 |
HttpContext |
接口 |
Pascal |
加前缀 I |
IdataAdapter |
枚举名 |
Pascal |
首字符大写 |
CommandType |
枚举值 |
Pascal |
首字符大写 |
CommandType.Text |
事件 |
Pascal |
首字符大写 |
SelectedINdexChanged |
自定义异常 |
Pascal |
加后缀Exception |
ArgumentException |
公共字段 |
Pascal |
首字符大写 |
Int32.MaxValue |
方法 |
Pascal |
首字符大写 |
ToString |
命名空间 |
Pascal |
首字符大写 |
System.Xml |
属性 |
Pascal |
首字符大写 |
BackColor |
保护或私有字段 |
Camel |
首字符小写 |
MyVariable |
参数 |
Camel |
首字符小写 |
cmdText |
附录二.命名规范
一.类
1.1..使用Pascal规则命名类名,即首字母要大些.。
如:
Class person
ClassBmpFileStream
1.2.使用能够反映类功能的名词或名词短语命名类。
如:
public classFileStream
public class Button
public classstring
1.3.不要使用“_”,”C”,”I”等特定含义前缀。
如:
class –ManagerSystem
classCManagerSystem
classImanagerSystem
1.4.自定义异常类应以Exception结尾。
如:
Public class EmailException:Exception
{
//类体
}
1.5.文件名要能反映类的内容,最好是和类同名。
二、类字段
2.1.用camel规则来命名类成员变量名称,即首单词(或单词缩写)小写。
如:
class Student
{
string stuName;
string stuNo;
string password;
}
2.2.类字段变量名前加”_”前缀。
如:
Class student
{
String_stuName;
String _stuNo;
}
2.3坚决在普通变量前加”m_”前缀(这是VC老命名规则)。
如:
Class Student
{
sting m_stuName;
sting m_stuNo;
}
三. 方法
3.1方法采用Pascal规则,第一个字符要大写。
如:
public void DoubleVaule(){…}
public void Show(){…}
3.2方法名应使用动词或动词短语。
如:
void RemoveAll(){…}
void GetCharArray(){…}
void Invoke()
3.3类中访问修饰符或者功能相同的方法应该放在一起,且公共或实现接口的方法在前。
如:
Class Test
{
public void Invoke(){…}
public void Insert(){…}
private void RemoveAll(){…}
private void GetCharArray(){…}
}
四.属性
4.1使用名词定义属性,属性使用Pascal规则,首字符大写。
如:
public class Book
{
public Color BookName
{
//属性代码
}
}
4.2属性和相应字段名称要关联,可以使用”重构”菜单来生成属性.
如:
publicclass Book
{
private string bookName;
public Color BookName
{
Get{returnbookName;}
}
}
五.参数
5.1参数采用camel规则命名,首字符小写。
如:
String Format(string format,object[] args){…}
5.2使用描述性参数名称,参数名称应当具有足够的说明性。
5.3不要给参数加匈牙利类型表示法的前缀。
如下面是不合理的:
voidInsert(string sName,string strAddress)
应该为:
void Insert(stringname,string address)
5.4检查方法所有输入参数的有效性。
六.常量
6.1只读常量使用Pascal命名规则,即首字母大写。
如:
class Calendar
{
public readonlyColor RedColor;
public constTuesday;
}
6.2枚举命名使用Pascal规则命名,枚举成员本质属于常量,命名规则同上。
如:
enum CarColor { Red , Blue , Yellow }
6.3枚举值从小到大顺序定义。
如:
enumCarColor
{
Red = 1;
Blue= 2;
Yellow = 3;
}
6.4静态字段或属性采用Pascal规则,首字符大写。
public class Component:IComponent
{
static string typeName;
public static string TypeName{get;set}
}
七.接口
7.1接口定义使用Pascal规则,且必须以大写”I”开头。
public interfaceIDatePort
public interfaceIFormatable
7.2接口名称要有意义,中间不要有下划线”_”等字符串。
如:
interface I_Date_Port 是不合适的。
7.3如果类实现了接口,名称尽量和接口相同,只是省掉”I”字符。
public interface IComponent
{
//接口定义
}
public classComponent: IComponent
{
//类实现
}
八.事件
8.1委托名称采用Pascal规则,第一个字符大写。
如:
public delegate voidCountHandler(int x,int y);
8.2定义事件的委托要使用EventHandler后缀,且包括sender和e两个参数。
如:
Delegate voidMouseEventHandler(object sender,MouseEventArgs e) ;
8.3事件用到的参数类,名称要带EventArgs后缀。
如:
public classMouseEventArgs:EventArgs
{
//参数类内容
}
九.命名空间
9.1命名空间名称采用Pascal规则,首字符大写。
如:
NamespaceHairCompany
{
//命名空间内容
}
9.3命名空间名称尽量反映其内容所提供的整体功能。
如:
Microsoft.Media
Microsoft.Media.Design
附录三.注释规范
一.文件头部注释
1.1 文件都包含文件头,要说明文件名、作者、创建时间、变更记录等。
如:
/***********************
*文件名:CarPrint.cs
*作者:赵建磊
*创建日期:2010-05-23
*描述:完成打印功能
*修改日期:2009-11-23
*Email:[email protected]
***********************/
1.2推荐采用.NET形式书写头部注释。
如:
///<summary>
///文件名:CarPrint.cs
///作者:赵建磊
///创建日期:2010-05-23
///描述:完成打印功能
///修改日期:2009-4-23
///Email:[email protected]
///</summary>
二.类及其成员注释
2.1对方法和类使用”///”三斜线注释。
如:
///<summary>
///功能:对此类功能的描述
///作者:作者中文名
///日期:编写日期等
///描述:完成打印功能
///修改日期:2009-11-23
///</summary>
ClassBookSystem
{
///<summary>
///图书详细信息查询
///</summary>
Public DataSetSelectBooks(int id)
{
}
}
2.2.代码行文注释采用”//”和”/**/”进行,应量说明问题。
PublicDataSet SelectBooks(int id /*书籍ID*/)
{
DataSet dsBook;//注释数据集
}
2.3添加的注释必须能够说明此语句块的作用和实现手段。
2.4所有的注释都应该用英文或者中文,同一段注释不要混用两种语言。
2.5代码变更需要将旧代码注释,并且说说明变更原因、变更作者和变更时间。
附录四.行文规范
不可按外貌断定是非,要按公平断定是非。
-----《新约》(john)
版面
尽管在定义代码样式的格式时,你可以做出很多个性化的选择,但所有这些都是关于审美的。从定义上看,样式没有任何句法或语义上的意义;编译器会忽略样式。然而源代码的真正读者是其他程序员。编写代码时要为他们的利益着想。
u K&R括号风格
K&R风格是最早为人们所喜爱的风格,它是由C语言之父Kernighan和Ritchie在他们的《C程序设计语言》一书中确立的。由于这个原因,这种风格常被认为是最初和最好的风格。它的诞生来源于在一个小屏幕中显示尽可能多的信息的需求。
int k_and_r( ) {
int a = 0, b = 0;
while (a != 10) {
b++;
a++;
}
return b;
}
优点
l 占用空间较小,所以在一屏上一次可以显示更多的代码
l 后括号与相对应的语句缩进相同,所以可以很容易地找到括号所终止的构造
缺点
l 前括号和后括号上下不对齐,所以视觉上不易匹配
l 如果页面右侧的前括号丢失,将很难发现
l 代码语句看上去挤作一团
u Allman括号风格
Allman括号风格是一种空间上更开阔的方法。这也是C#语言在国内最流行的风格。
Int exdented( )
{
Int a = 0,b = 0;
While (a != 10)
{
b++;
a++;
}
Return b;
}
优点
l 格式清晰整洁
l 每个代码块都更易于区分
缺点
l 占用的竖向空间更多
l 如果你有很多只包含一条语句的代码块,那么会显得很浪费空间
l 对某些黑客而言这太像Pascal语句了
缩写规范
l 标识符应当直观可望文知意,不提倡使用任何缩写。
l 字符串变量推荐以“str”或“s”开头,采用string.Empty来初始化。
如:
String strName = string.Empty;
l 普通对象可以以“obj”开头。
如:
Book objBook=new Book( );
l 缩写可自行定义,一般取单词的前/后字符组成,以含义直观为准则。
合理名称如:
Label lblName;
Lable lbName;
Color bkColor;
ColorbackgroudColor;
Color bgColor;
l 一般情况下不要让缩写破坏标识符的含义。
如:
Public StudentGetStudent( )
排版
l 每行语句至少占一行,如果语句过(超过一屏),则语句断为两行显示。
如:
Public void Insert(string bookName,
String bokID,
String bookDetail,
Int bookNumber
);
下列定义不合理:
frmMain.Width = 0;frmMain.Height=0;
应为:
frmMain.Width = 0;
frmMain.Height=0;
l 把相似的内容放在一起,比如字段、属性、方法、事件等,使用“#region”命令分组。
如:
Class Book
{
#region构造方法
PublicBook(string name) {…}
#endregion
#region公共方法
PublicBook GetBookByName(string name) {…}
#endregion
#region属性
Publicstring Name{…}
#endregion
#region私有字段
Privatestring name;
#endregion
}
l 多个程序元素进行对等操作时,操作符之前、之后或者前后要加空格。
如:
If (!ValidNi(ni))
{
//程序代码
}
nRepssnInd = SsnData[index].nRepssnIndex;
nRepssnNi = SsnData[index].ni;
l 每个方法的源程序行数原则上应该少于200行。
l 语句嵌套层次不得超过3层。
l 避免相同的代码段在多个地方出现。
语句结构
l 如果使用了异常结构,一定要处理异常,一般是要写日志文件。
如:
try
{
//异常监控代码
}
Catch(Exception e)
{
Log.WriteLine(e.Messge);
}
l 分支语句不应该使用复杂长条件。
如:
If(txtName ==null || txtName == string.Empty)
{
//处理代码
}
应该将长条件封装成方法:
if(txtNameEnable( )) {…}
switch语句,case后面必须接break(这一点C#已经强行限制)。
l 禁止使用goto语句进行跳转。
l 行文中严禁出现“魔数”,特定含义的常数必须定义成枚举或常量。
如:
if( objCar.Type==1) objCar.Run( );
应为:
if(objCar.Type==Cars.BMP)objCar.Run( );
l 不同类型的操作符混合使用时,使用括号给出优先级。
如:
if( year % 4 == 0|| year % 100 != 0 && year % 400 == 0)
应为:
If((year % 4) == 0 ||((year % 100) != 0 && (year % 400) == 0 ))
l 不允许使用复杂的操作符组合。
如:
maxVal = ((a>b ? a:b) > ? (a>b ? a : b) : c);
应该为:
temp = (a>b ? a : b);
maxVal = ( iTemp > b ? iTemp : b);
l 循环、判断语句的程序块部分用花括号括起来,即使只有一条语句。
如:
if(condition)
flag = true;
推荐改为:
if(condition )
{
flag = true;
}
l 在switch语句中总是要有default子句,建议使用断言。
CarType type = GetType( );
Switch (type)
{
case CarType.GMC:
return new GMCCar();
break;
case CarType.BMW:
return new BMWCar();
break;
default:
Debug.Assert(false);
break:
}
l 每个类和方法完成单一的功能,不设计多用途面面俱到的类和方法。
l 严禁使用未经初始化的变量,变量通常使用构造方法来初始化。
大小写
l 不要创建名称相同,但大小写区别的任何元素。
如:
Void MyFunction(string a, string A)
int Color {get, set}
int CoLor{get,set}
l 应当大写仅有两个字符的缩写。
如:
string stuID;
l 不要把易混淆的数字和字母放在一起。
如:
string r = (lo == 10) ? (I1 == 11) : (lol != 101);
l 使用英文命名标识符。
l 不允许变量名、类名、属性名、方法名等与系统标识符重名。
SQL编码规范
l SQL语句全部大写。
如:
SELECT psnNameFROM person
CREATE PROC p_Selectproc
l 对较复杂的SQL语句加上注释,说明其功能。
l 连接符OR、IN、AND、以及=、<=、>=等前后加上一个空格。
l 使用明确的列代替SELECT*。
如:
SELECT A.ID, A.NAME, B.ID, B.NAME
FROM CLASS A, PERSON B
WHERE A.ID = B.ID
AND A.GRADE = ‘5’
软件架构
l 数据库中每一张表对应一个实体类/所据传输对象(DTO)。
l 实体类名称使用表名,也可带有Dto后缀。
如:
classpersonDto
{
Public String Nme
{
get{return name;}
get{this.name = value;}
}
}
l 三层架构应当合理使用,不应生搬硬套。
三层架构元素推荐后缀:
数据传输对象 XxxxDto
DAO工厂 XxxDAOFactory
DAO接口 IXxxxDAO
服务接口 IXxxxService
DAO的数据库实现 XxxxDAOOracle/XxxxDAOInfomix
业务逻辑 XxxxManger
系统
l 在国内不要随便使用设计模式等代码模式,因为并不流行。
l 系统输入、资源操作、(如内存分配、文件及目录操作)、网络操作(如通信、调用等)、任务之间的操作(如通信、调用等)时必须进行错误、超时或异常处理。
l 模块编写应该有完善的测试方面的考虑。