1 命名规范制定意义
1 方便代码的交流和维护,便于日后自己的再次阅读。
2 不影响编码的效率,不与大众习惯冲突。
3 使代码更美观、阅读更方便。
4 使代码的逻辑更清晰、更易于理解
2 命名规范制定原则
首要原则
有意义的,描述性的词语来命名。能够一眼看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了
1. 除约定俗成的,别用缩写。用name, address, salary等代替 nam, addr, sal
2. 除用于循环,别使用单个字母的变量象i, n, x 等. 而要使用 index, temp等。
for ( int i = 0; i < count; i++ ){ ...}
其他习惯
除了界面控件外,不要使用类型前缀。比如:使用名称amount,而不是 intAmount;
类:使用名词、名词短语命名。比如:public class FileStream;
方法:使用动词、动词短语开始。比如:CreateUser(), RemoveAt()等;
接口:以 I 开始,后面加上名词、名词短语、形容词命名。比如:IDisposable;
常量:所有单词大写,多个单词之间用 "_" 隔开。public const string PAGE_TITLE = "Welcome";
命名空间: 基本格式:
CompanyName/ProjectName.TechnologyName[.Feature][.Design]
a) CompanyName/ProjectName:公司名、项目名称或产品名称;
b) TechnologyName:稳定的、公认的技术名称或架构层次名称;
c) [.Feature][.Design]:可选的功能与设计;
3 规范
1、用pascal规则来命名方法和类.(第一个单词首字母大写,后面连接的每个单词首字母都大写)
public class DataBase ;public void GetDataTable()
2、类:使用名词、名词短语命名。比如:public class FileStream;
2.用camel规则来命名局部变量和方法的参数. (第一个单词不大写,后面连接的单词首字母大写)
public void AddUser(string userId, byte[] password)
{ string userName;}
3.所有的成员变量前加前缀 _
public class Database
{ private string _connectionString; }
4.接口的名称加前缀 I
interface ICompare
{ int compare(); }
5.自定义代码属性类以Attribute结尾
public class OperationAttribute : Attribute
6.自定义的异常以Exception结尾
public class AppException : Exception
7.方法的命名.一般将其命名为动宾短语,“动词+对象”.
GetRecordData();GetPath();CreateFile();
8.代码的缩进.要用Tab,而不要用space.
9.使用带有说明性的变量名。
(a)避免单字符串的变量名,使用类似于index或temp这样有意义的名字。
(b)对于public或protected类型的变量避免使用匈牙利表示法。
(c)不要缩写单词。
10.所有的类成员变量应该被声明在类的顶部,并用一个空行把它们和方法以及属性的声明区分开.
11.用有意义的名字命名namespace,如:产品名、公司名.
12.建议局部变量在最接近使用它时再声明.
13.使用某个控件的值时,尽量命名局部变量.
14.把引用的系统的namespace和自定义或第三方的用一个换行把它们分开.
15.文件名要能反应类的内容,最好是和类同名,一个文件中一个类或一组关连类.
16.目录结构中要反应出namespace的层次.
17.大括号"{"要新起一行 .
18.在和你的代码缩进处于同一个级别处为该行代码添加注释
4 提示语规范
1. 提示语中不要出现“你”,而应用尊称“您”。
2. 提示语中不要出现感叹号“!”,结尾一律用句号“。”
3. 提示语应尽量友好,提示原则是:先给出提示信息,然后给出建议或原因。比如:“你不能添加新的用户,只有系统管理员才能添加用户。” 前半句给出提示信息,后半句给出原因。
4. 页面中所有出现用户不太好理解的地方都应该给出相应的提示信息,给用户以帮助。比如:在项目请款按钮后面加提示信息:(提示:只有添加请款明细之后才能点击此按钮进行请款。)
5 控件命名
控件的名称中需要加上前缀,之所以这样做是为了区分界面的控件和普通的对象,由于界面修改往往非常频繁,区分开来能使你更快速的找到控件,从而修改界面。举一个例子:
界面有10个TextBox、10个Label。一个TextBox对应一个Label,为了完成读写,你至少要有20条语句来从控件进行取、赋值操作,如果有前缀的话,输入this.txt,你就几乎马上能找到这个控件。反之,如果没有前缀,由于窗口或页面对象拥有大量的属性和变量(>100个),你将花费大量时间来查找。另外一个TextBox对应一个Label(一个代表值,一个代表名称),它们往往指同一样事物,如果有前缀,就很容易区分这两个控件。
控件 |
前缀 |
控件 |
前缀 |
Label |
lbl |
CompareValidator |
cv |
TextBox |
txt |
RangeValidator |
rv |
Button |
btn |
RegularExpressionValidator |
rev |
CheckBox |
chk |
ValidatorSummary |
vs |
RadioButton |
rdo |
GridView |
gv |
CheckBoxList |
cbl |
MultiView |
mv |
RadioButtonList |
rbl |
View |
vw |
ListBox |
lst |
HiddenField |
hf |
DropDownList |
ddl |
||
DataGrid |
dg |
||
DataList |
dl |
||
Image |
img |
||
Table |
tbl |
||
Panel |
pnl |
||
LinkButton |
lbt |
||
ImageButton |
imgbtn |
||
Calender |
cld |
||
RequiredFieldValidator |
rfv |
6 注释规范
类注释:
Create by : Peter Cheng
Create Date : 2003-7-23
Description : // 模块描述
方法注释:
/// <summary>
/// 根据查询条件获得收货单的查询结果
/// </summary>
/// <param name="strCreator">采购商务员id</param>
/// <param name="strVendorId">供应商id</param>
/// <returns>查询结果数据集</returns>
代码中间注释:
// 2011-5-1 qf 添加功能:xxx
或
//2011-5-1 qf 修改功能:xxx
关键代码注释
//