项目编码规范 文件状态: [ ] 草稿 [ ] 正式发布 [√] 正在修改 文件标识: 项目编码规范 当前版本: 1.0 作 者: 张波 完成日期: 2010-8-20 参考文件: NoticeDAL.cs 文件及文档注释,类,方法,变量命名 NoticeModel.cs 属性定义,私有变量 MainPage.xaml xaml中相关注释,控件命名 MainPage.xaml.cs 其他规范 编码规范目的
当团队的所有开发人员都在同一个代码上工作时,也就是代码集体拥有的情况,大家都不希望别人改变代码的外观以适应他们自己的风格。因此,通过在项目之初达成一个编码标准,就可以增加团队的生产率和沟通效果。
1. 基本规则
1. .NET有两种主要类型的字母大小写形式:Pascal和camel。
对于Pascal字母大小写形式来说,所创建名称的第一个单词的第一个字母是大写的,该名称中的后续单词也是如此,例如ThisIsPascalCase。
对于camel字母大小写形式来说,所创建名称的第一个单词的第一个字母是小写的,而该名称中的后续单词使用大写的字母,例如thisIsCamelCase。
2. 如果可以更清楚地描述事物的含义, 大家应该尽量使用完整的单词,而不是缩略语。让其他人在看到我们的变量方法名时,大概能猜出它是做什么的。
2. 命名规范
项
Pascal命名规则 文件 类
Pascal Pascal
DatabaseConnector
Public class DatabaseConnector{}
使用名词来描述 类的名称应该与定义它们的文件的名称匹配
接口 方法
单元测试方法
Pascal Pascal Pascal
interface IdatabaseConnector{} CalculateBalance() TestFindAllCustomers()
接口名称以字母I开头 使用动词来描述方法 单元测试名称以单词Test开头。
属性
Pascal
public string AccountNumber {get {return accountNumber;}}
大小写形式 相关例子 注释
公共实体字段 公共类字段 命名空间 解决方案 项目 委托
Pascal Pascal Pascal Pascal Pascal Pascal
CustomerName
public static bool HasGoodCredit = true namespace DataLayer NorthWindTrader DataLayer
public delegate void MouseEventHandler (object sender, MouseEventArgs e);
在命名的后面加EventHandler
Camel命名规则 私有的实例字段 私有和受保护的类字段 局部变量
camel camel camel
private float _accountBalance
protected static int numberOfAccounts string accountNumber =
FindAccountByCustomerName(customerName)
过程的参数变量
camel
public class hello {
void say(string p_sayWord) {
} }
参数
camel
public void
GetCurrentBalance(string accountNumber)
常量
全部大写
Decimal MINNUM_BALANCE = 100
全部大写,单词之间以 “_” 分隔
以_开头,第一个字母小写
过程的参数使用“p_”作为前缀.
控件对象命名规则
TextBox控件: TextBlock控件:
Label控件: Button控件: ComboBox控件: CheckBox控件: RadioButton控件:
Panel控件: DataGrid控件:
前缀为txt
前缀为lbl 前缀为btn 前缀为cmb 前缀为chk 前缀为rad 前缀为pnl 前缀为grd
Border控件: TreeView控件: ContextMenu控件: 数据库命名规则
视图: 存储过程: 触发器: 函数过程: 列名表名:
前缀为brd 前缀为tre 前缀为cmu
v_ 首字母大写 sp_ 首字母大写 t _ 首字母大写 fn_ 首字母大写一般第一列名为ID、主键、标识递增,其他列名表名推荐采用Pascal命名方式,尽可能用英文单词或英文缩写,如英文过长(超过6位)或过于生僻可用汉语拼音的首字母。
3. 缩进
1. 按.NET推荐的编码风格编写,使用缩进与空行。使用制表符来进行缩进, 而不要用空格.
2. 代码的行长对于可读性也非常重要。试着将每一行的代码控制在80个字符之内。当每行的字符不超过80个,
而又需要换行时,请遵循下述规则:
1) 在操作符前断开 2) 在逗号后断开 3) 对齐括号
4. 声明
1. 局部变量的名称要有意义.不要用x,y,z等等(循环变量除外)。
2. 所有的成员变量声明在类或者方法的顶部,用一个换行把它和方法分开(例外:for循环内局部变量的声明和初
始化)。
3. 在声明类字段、实例字段或者局部变量时,每行只声明一个。而当在一起进行几个声明时,需对准字段或者变
量的名称。 4. 对于局部变量来说,应该在声明变量时就进行初始化。
5. 注释
C#中可以使用的注释类型有以下几种。 类型
文档注释
行末注释
单行注释
多行注释
文件头注释
#region #endregion
相关例子
/// /// This class represents a bank account ///
int myCount = 0; // Keep track of how many times ...
// Here is where we gather account data
/* Here is where we gather account data */
/*************************************************************** * 模块名称:XXXX * 功能简述:
* 创建者:新建者 创建时间:2010-6-9 * 修改人:修改人 最新修改时间:2010-7-18
***************************************************************/
#region 和 #endregion 表示将某一模块的代码折叠起来,便于查看。#region 后面可以跟任意文字以对该区域进行说明(region 和说明的文字要空格隔开)。 例: #region 删除公告 #endregion
应用时机
用于文档类和方法
用于描述某些含义不太清晰的事物的目的
用于描述后续事物或者代码块的目的
用于在代码块处进行注释,或者用于描述后续多行代码的目的 用于说明本文档的相
关信息
6. 空行与空格
尽管编译器可以忽略空行与空格,但是空行与空格可以将不同逻辑的代码单元分离,从而提高代码的可读性。 1. 在下述几种情况下应该使用一个空行:
1) 2) 3) 4)
方法之间 声明和语句之间 代码的逻辑段之间 单行或者多行注释之前
2. 在下述几种情况下应该使用一个空格:
1) 2) 3) 4)
带圆括号的关键字之后 参数列表的逗号之后 数据操作符的前后
在for语句中,用于将语句的3个逻辑段分开
7. 解决方案和项目组织
每个解决方案都应该拥有下述项目:
1. 业务项目(business project)仅存放业务项目。
2. 数据项目(data project)处理数据库和其他用于检索或者更新数据目的的遗留系统的访问。 3. 表示项目(presentiation project)处理使用系统的终端用户所需的所有视图。 4. 测试项目(test project)存放应用程序所有的单元测试。
8. 其他编码规则
1. C#中有多种类型的语句。每一行代码包含的内容不应该超过一个语句。 2. 大括号两部分都应该独占一行。
3. 在return语句中,一般不要使用括号,除非为了使返回值更加明显。
例: List Notice = new List();return Notice;
4. 文件名要能反应类的内容,最好是和类同名,一个文件中一个类.
例: 在文件 NoticeDAL.cs中, 只有以下一个与文件名相同的类:
public class NoticeDAL
{
public bool NoticeDel(int ID)
public void AddNotice(NoticeModel notice) „ }
5. 大括号\"{\"要新起一行.
6. switch语句一定要有default来处理意外情况.
7. 同程序外部连接(数据库、接口、文件、类型转换等)一定要捕获任何类型的异常,并进行异常处理. 8. 给出友好的消息给用户,必要时用日志记录错误的细节,包括发生的时间,和相关方法,类名等。不要“捕捉
了异常却什么也不做”.
9. 始终使用\"{ }\"包含if/else下的语句,即使只有一条语句 10. 把引用的系统的namespace和自定义或第三方的分开 11. 自定义的属性以Attribute结尾,
例:public int AuthorAttribute { }
12. 自定义异常类以Exception结尾,并且在类名中能清楚的描述出该异常的原因。
例:public class NotFoundFileException:Exception { }
13. 注释需和代码对齐
14. 对代码段、方法的参数和各变量的用途进行注释
例:
/// /// 删除公告方法,成功返回true; ///
/// 要删除的公告ID /// 返回bool public bool NoticeDel(int ID) { }
15. 用一个空行来分开代码的逻辑分组 16. 花括弧 {}需和括号外的代码对齐
17. 不在代码中使用具体的路径和驱动器名,使用相对路径,并使路径可编程.