编程规范
编程规范
[编辑]第一章 术语定义
[编辑]* **Pascal 大小写**
将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用Pascal 大小写。例如:
BackColor
* **Camel 大小写**
标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如:
backColor
第二章 命名规范
[编辑]代码
[编辑]除了参数、私有的实例字段、方法内的变量使用Camel命名;其它情况,如类、公有字段、方法名、属性名等都使用Pascal;与共有字段相配对的私有字段以m_开始 如:
* 参数
public void SampleMethod(Int32 testVar1,Int32 testVar2)
{
}
* 私有的实例字段
class SampleClass
{
private String sampleString;
}
* 方法内的变量
public void SampleMethod(Int32 testVar1,Int32 testVar2)
{
String sampleMethod;
}
* 与共有字段相配对的私有字段
private Int32 m_Handle;
public Int32 Handle
{
get
{
return handle;
}
}
控件
[编辑]主要控件名简写对照表\\ 控件名简写+英文描述,英文描述首字母大写 ^ 控件名 ^ 简写 ^ 控件名 ^ 简写 ^ 控件名 ^ 简写 ^ 控件名 ^ 简写 ^ | Label | **lbl** | TextBox | **txt** | RadioButtonList | **rdl** | Image | **img** | | Button | **btn** | LinkButton | **lnkbtn** | Panel | **pnl** | Repeater | **rpt** | | ImageButton | **imgbtn** | DropDownList | **ddl** | Table | **tbl** | HyperLink | **lnk** | | ListBox | **lst** | DataGrid | **dg** | RequiredFieldValidator | **rfv** | CompareValidator | **cv** | | DataList | **dl** | CheckBox | **chk** | RangeValidator | **rv** | RegularExpressionValidator | **rev** | | CheckBoxList | **chl** | RadioButton | **rdo** | ValidatorSummary | **vs** | SqlDataReader | **sdr** | | DataRow | **dr** | DataSet | **ds** | DataTable | **dt** | | |
样式表
[编辑]* 类名遵循Pascal大小写 * 类取名的原则是通过类名,能够看得出此样式的用处或者基本样式特性: * 指出样式的特性,如:.Section__Blue__(蓝色区块),.Main__Center__Div(居中的主区块) * 指出样式的用途,如:.LatestNews(最新新闻),.WeeklyReport(一周报告),这样的命名适用于某个频道或者页面,其名字在一个页面上一般是唯一的 * 价值中国的通用样式 * span.LiTitle, span.LiDate(li中左右两列样式) * div.clearer(样式清除器,因修改成本太大,目前只有这个没有遵循Pascal命名规则) * .HSpace0x(x一般为5,这是间隔x像素的横条) * 适用于特定标签的类名前要加上标签名:
div.SectionBlue{ }
td.Alternating{ }
li#HighLight{ }
* 样式的类定义遵循HTML标签的层次关系(通用样式除外)
如:
-
样式表定义:
div.SectionBlue{ }
div.SectionBlue ul#LatestNews{ }
div.SectionBlue ul#LatestNews li.Alternating{ }
span.LiTitle{ } /*通用样式*/
span.LiDate{ } /*通用样式*/
文件、目录、URL
[编辑]文件、目录命名均遵循Pascal;\\ 如:
* /User/UpdateInfo.aspx * /UserControls/User/UserInfo.ascx
URL(包括参数)遵循Pascal\\ 如:
* /User/Message.aspx?UserID=n * /Search.aspx?Keyword=x&Source=s
数据库
[编辑]- 表、字段**\\
遵循Pascal命名规则
* 表,如:Blog、BlogComment * 字段,如:UserID、MdyTime、Content
- 索引**\\
非聚集索引:IX_表名_索引字段\\ 如:
* IX_BlogEntry_Passed_AddTime * IX_UserInfo_LastLoginTime
- 存储过程**\\
pr_表名_动作\\
* 比如你要删除一本书:pr_Book_Delete; * 或者你要修改一篇文章:pr_Boke_Modify(或update); * 或者你要列出一本杂志的信息:pr_Mag_Select(或Show);
- 视图**\\
vi_Pascal命名规则,如:vi_Boke、vi_BokeComment
- 触发器**\\
tr_表名_Insert[Update|Delete],如:
* tr_Book_Insert * tr_BlogEntry_Delete
- 注意:除非没有替代解决方案,严禁使用触发器**
如果这个存储过程并不是通用的,你可以在存储过程的末尾增加这个存储过程使用的场合,
* 比如你要在个人主页列表书籍:pr_Book_List_AuthorIndex
- 常用字段命名规范**\\
AddTime:添加时间,MdyTime:修改时间,Adder:添加者,Mdyer:修改者,IsXXX:是否XXX(如IsElite:是否推荐,IsHide:是否隐藏),XXXs:XXX数量(如Hits:点击数,Comments:评论数,Elites:推荐数,Digs:推荐数)
8-o **注意:表、字段的命名必须以英文字母开始**
第三章 空行
[编辑]空行是为了将逻辑上相关联的代码分块,以便提高代码的可阅读性。
- 在以下情况下使用两个空行**
- 接口和类的定义之间。 - 枚举和类的定义之间。 - 类与类的定义之间。
- 在以下情况下使用一个空行**
* 方法与方法之间。
public void SampleMethod1(Int32 testVar1, Int32 testVar2)
{
}
public void SampleMethod2(Int32 testVar1, Int32 testVar2)
{
}
* 方法中变量声明与语句之间。
public void SampleMethod1(Int32 testVar1, Int32 testVar2)
{
String sampleVar1;
String sampleVar2;
Response.Write("Sample");
}
* 属性与属性之间。
public String SampleProperty1
{
get { }
set { }
}
public String SampleProperty2
{
get { }
set { }
}
* 方法中不同的逻辑块之间。
public void SampleMethod1(Int32 testVar1, Int32 testVar2)
{
Int32 multiplyResult = testVar1 * testVar2;
Response.Write(multiplyResult);
Int32 plusResult = testVar1 + testVar2;
Response.Write(plusResult);
}
* 方法中的返回语句与其他的语句之间。
public Int32 SampleMethod1(Int32 testVar1, Int32 testVar2)
{
Int32 multiplyResult = testVar1 * testVar2;
Response.Write(multiplyResult);
return multiplyResult;
}
* 属性与方法、属性与字段、方法与字段之间。
public String SampleField1;
public String SampleProperty1
{
get { }
set { }
}
public void SampleMethod2(Int32 testVar1, Int32 testVar2)
{
}
* 注释与它注释的语句间不空行,但与其他的语句间空一行。
public void SampleMethod1(Int32 testVar1, Int32 testVar2)
{
//将两数相乘
Int32 multiplyResult = testVar1 * testVar2;
//输出相乘结果
Response.Write(multiplyResult);
}
第四章 注释
[编辑]- 注释原则**
* 为了防止问题反复出现,对错误修复和解决方法代码总是使用注释;
* 注释代码中不十分明显的任何内容;
* 修改代码时,总是使代码周围的注释保持最新;
* 在声明接口、类、方法、属性、字段时,都应该用.Net的XML型文档注释
/// <summary>
/// 示例类
/// </summary>
class SampleClass
{
/// <summary>
/// 字体颜色代码,16进制
/// </summary>
public String FontColor;
/// <summary>
/// 新闻数量
/// </summary>
public String Counts
{
get { }
set { }
}
/// <summary>
/// 计算两个整数相乘的结果并输出
/// </summary>
/// <param name="testVar1">乘数</param>
/// <param name="testVar2">被乘数</param>
public void SampleMethod1(Int32 testVar1, Int32 testVar2)
{
//将两数相乘
Int32 multiplyResult = testVar1 * testVar2;
//输出相乘结果
Response.Write(multiplyResult);
}
}
第五章 申明
[编辑]- 一行只做一个申明 - 建议在申明时就做初始化 - 申明建议放在代码块的开始,而不要在使用时才申明,循环中的i,j等除外 - 不要使用public 或 protected 的实例字段。避免将字段直接公开给类以外的开发人员。考虑为字段提供 get 和set 属性访问器,而不是使它们成为公共的。 get 和 set 属性访问器中可执行代码的存在使得可以进行后续改进。示例:
private Int32 m_Handle;
public Int32 Handle
{
get
{
return m_Handle;
}
}
第六章 语句
[编辑]本章就一句话:即使if else的代码段中只有一个语句,也要加大括号
第七章 数据库约定
[编辑]* **新建表、存储过程等数据库对象时,对象名一定要写上其所有者**,例:
正确:
CREATE TABLE [dbo].[SpiderNewsDigRelation]
CREATE PROCEDURE [dbo].pr_Common_Delete
错误:
CREATE TABLE SpiderNewsDigRelation
CREATE PROCEDURE pr_Common_Delete
* **SQL语句的关键词一律大写**
正确:
SELECT Field1, Field2 FROM Table1 WHERE Field1 = 'Condition' AND Field2 = 2 ORDER BY Field3 DESC
SELECT A.Field1 FROM Table1 A INNER JOIN Table2 B ON A.ID = B.ID
错误:
select Field1, Field2 from Table1 where Field1 = 'Condition' and Field2 = 2 order by Field3 desc
Select A.Field1 From Table1 A Inner Join Table2 B On A.ID = B.ID
第八章 协作
[编辑]- 修改文件之前,要在 StarTeam 里先**刷新**,看有无其他同事锁定,如果有,要通知锁定该文件的同事解锁; - 如果要修改的文件没有被其他同事锁定,要先锁定,再修改 - 当次的任务没有完成之前,**禁止** Check In 任何你锁定的文件 - 当确认自己的任务**完成**(需要经过良好的测试),需要**部署**时,再根据部署文档逐一 **Check In 并 解锁** 自己修改的文件 - 为了不至于自己长时间锁定某文件,影响其他同事的开发,请将自己的任务拆分为粒度较小的多个任务,使之能较短时间(不超过2天)开发、部署完毕 - Template:Knowledge base:部署文档示范.rar
第九章 其他
[编辑]- 尽量不要在生产服务器添加测试数据,若有必要这样做,要在测试后,立即删除测试数据