系统命名规范

 

目录
1、编制目的………………………………………………………………2
2、范围……………………………………………………………………2
3、权责 ……………………………………………………………………2
4、说明 ……………………………………………………………………2
5、 数据库设计命名规范…………………………………………………2
6、C#命名…………………………………………………………………4
7、脚本命名………………………………………………………………4
8、其它组件或功能文件命名………………………………………………4
9、其它命名 ………………………………………………………………4
10、附件 1…… …………………………………………………………5
11、附件 2…… …………………………………………………………5
 
 
1 、编制目的
规范与指导 杰仕密新系统规格说明,详细设计、数据库设计与编码实现,提高系统的可读行,提高程序易维护性。
2 、范围
新开发软件系统 (不包含旧系统)
3 、权责
系统开发人员与维护人员、程序员、分析员,按本系统规范进行文文件编写与编码实现。
 
 
4 、说明
详细设计与数据库设计与编码采用全英文命名方法。如果对象由多个单词组成,则尽量取具有代表意义的单词组合。命名要求做到“望文生意”。
在详细设计过程中,根据每个模块的具体情况,选择设计图表与表达方法。
系统解决方案使用 C#预定义而不要使用System名称空间中的别名,(如使用 string而不是String,用object非Object),避免在同一个文件中放置多个类,除特别说明外,命名不要指明类型,如不要用 strMyName来说明是string型的。
 
5、             数据库设计命名规范
5.1 数据库表:
公司信息的表格可以命名为Company,也可以命名为CompanyInformation。
注:所有表格如果没有特别申明或沿用旧的系统,均由表自增长字段建立主键。
5.2 字段命名
例:客户编号CustomerNO。
单据主表的自增长主键字段均命名为OrderID, 编号为OrderNO
数据库表格的自增长字段的命名为:功能+ID,如客户表的客户ID号为CustomerID
5.3 索引
原始刷卡记录表主键索引:PK_OriginalCardRecord         
原始刷卡记录表员工ID索引:IX_OriginalCardRecord_EmployeeID
5.4 外键关系
外键关系:FK_[主表]_[从表]_[字段名]
5.5 视图
v_ + [ 自定命名];
例:员工信息视图v_Employee。
5.6 存储过程:
sp_ + [ 自定命名]
自定命名除可运用上述编码原则, 另外可以加上数据处理的动词描述
例如:新增公司存储过程的命名sp_AddCompany
5.7 触发器:同存储过程的命名方法一样
tr_+ [ 自定命名], 注意新增、删除与更新的命名规则
Delete trigger: tr_Delete [table name] 
Insert trigger : tr_Insert[table name]
Update trigger: tr_Update [table name]
5.8 自定义函数
fn_ [ 功能]
例如:时间格式fn_FormatTime
6 、C#命名
6.1 类的命名方式
按功能命名,按软件架构后缀,如销售业务管理类SaleManagment,销售管理接口类SaleManagmentUI,销售管理数据库存取类SaleManagmentDAO,销售管理数据实体SaleManagmentData。
6.2 接口命名
类似于类的命名方式,且在前面加I字母
例如员工接口 Interface IEmployee
6.3 类说明:
类的变量、属性或方法等类成员的类型参照C#语法规范以及业务逻辑来确定。
6.4 类变量、属性、事件命名
A 、控件
工具控件:控件类型+功能类型,再参照Camel + 匈牙利命名法,如增加按钮控件butAdd。
注意:控件类型用控件的前三个简写字母组成,如TextBox为tex。几个特殊的控件,在简写重名的情况下取代表意义的字母命名,如DataGrid 与 DataList分别为dag与dal,Image与ImageButton分别为ima与imb。
第三方控件或系统控件在类型前加功能命名,如部门信息树视控件treDepartment。
自定义控件不用控件类型,直接在变量前加user即可,如部门树型控件userDepartment.
a)       类的全局变量、属性等: [变量名]
例如:客户姓名: CustomerName。
b)       类局部变量,private型变量,函数内部变量或函数参数,以小写开头。
例如客户姓名:customerName。
6.5 函数参数命名
同类的局部变量命名规则相同。
6.6 常量命名
参数:private const string PARM_PKID = “@PKID”;
字段:public const string FIELD_CUSTOMERID = “CustomerID”;
表名:public const string TABLE_CUSTOMER = “Customer”;
6.7 消息响应函数:
系统响应函数:按钮名称+“_”+事件名称,如增加按钮点击事件butAdd_Click()。
自定义的响应函数:类似“系统响应函数”。
 
7 、脚本命名
说明:客户端脚本Javascript。
类似于C#命名
8 、 其它组件或功能文件命名参照“类的命名方式”,如订单HTML文件:SalesOrderUI.htm.
9 、其它命名
9.1 单据的命名:[功能] + Doc + UI
9.2 台帐列表命名:[功能]+List + UI
9.3 查询接口命名:[功能]+ Search + UI
9.4 框架接口命名:[功能] + UI,可能是HTML或aspx檔
9.5 业务处理类命名(Business项目):按[功能]命名
9.6 资料访问类命名(DataAccess项目):[功能]+DAO
9.7 数据实体类命名(DataDetail项目):[功能] + Data
9.8 特殊变数命名
本系统特别定义类全局变量,按本规定命名:
A、  /// 订单ID与订单编号:public int OrderID, public string OrderNO
B、  订单接口内的订单业务全局变量public SalesOrder OrderBusiness,订单业务类的订单数据存取全局变量public SalesOrderDAO OrderDAO,订单接口类的订单数据实体变量public SalesOrderData OrderData。
 
附件1:C#注释样本
C# 函数注释:用户登陆函数注释举例
/// <summary>
/// 用户登陆
/// </summary>
/// <param name="UserID"> 用户ID </param>
/// <param name="UserID"> 用户密码 </param>
/// <returns> 用户登陆成功返回true,否则返回false</returns>
public bool Login(string UserID,string passWord)
{
     …………………
}
 
代码文件注释样本
/** *************************************************************************************************
     *Filename:            ProductionOrderUI.cs
     *Module:              生产单接口
     *Copyright:           中山杰仕密服装有限公司
     *Version:             1.0
     *Author:              刘亮全
     *Created Date:        2005-10-26
     *Last Modified Data: 2005-10-27
     *Description:         指导生产车间与开单员进行生产管理等,主要函数是GetOrderData()获取生产资料
* ************************************************************************************************* */
 
/** *************************************************************************************************
     *Modified by:         parss
     *Modified on:         2005-10-27
     *Description:         将物料单位显示为下拉列表控件,款式控件更新为用户控件
     *-----------------------------------------------------------------------------------------------
     * Modified by:        xxx
     * Modified on:        xxxx-xx-xx
     * Description:        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
************************************************************************************************** */
 
附件2:命名及编码注意事项
 
1.对自定义的属性类加上后缀 Attribute
2.对自定义的异常类加上后缀 Exception
3.方法的命名尽量使用动词
4.有返回值的方法的命名中要有返回值的描述,例如 GetObjectState()
9.使用带有说明性的变量名不要缩写单词(例如用 num取代number)。
12.使用有意义的名字定义名称空间,例如产品名或者公司名
13.避免通过全限定方式使用类型名称,使用 using关键词。
14.避免在一个名称空间中使用 using关键词
15.把所有系统框架提供的名称空间组织到一起,把第三方提供的名称空间放到系统名称空间的下面
16.使用代理推导而不要显式的实例化一个化代理
17.维护严格的代码缩进。不要使用 tabs或非标准的缩进,例如一个空格。推荐的缩进是3到4个空格。
18.在和你的代码缩进处于同一个级别处为该行代码添加注释。
19.所有的注释都应该通过拼写检查。注释中的错误拼写意味着开发进度的延缓。
20.所有的类成员变量应该被声明在类的顶部,并用一个空行把它们和方法以及属性的声明区分开
21.在最靠近一个局部变量被使用的地方声明该局部变量。
22.一个文件名应该能够反映它所对应的类名
24.总是要把花括号“ {”放在新的一行
25. 避免在同一个档中放置多个类
26.一个档应该只向在一个名称空间内定义类型。避免在一个档中使用多个名称空间
27. 避免在一个档内写多于 500行的代码(机器自动生成的代码除外)
28. 避免写超过 25行代码的方法
29.避免写超过 5个参数的方法。如果要传递多个参数,使用结构。
30.一行不要超过 80个字符
31. 不要手动去修改任何机器生成的代码
32.避免对那些很直观的内容作注释。代码本身应该能够解释其本身的含义。由可读的变量名和方法名构成的优质代码应该不需要注释。
33. 注释应该只说明操作的一些前提假设、算法的内部信息等内容。
34.只有对那些其它开发者的提示信息才有必要放到方法级的注释中来
35.只对那些亘古不变的数值使用 const关键词,例如一周的天数。
36.避免对只读 (read-only)的变量使用const关键词。在这种情况下,直接使用readonly关键词
37.对每一个假设进行断言。平均起来,每 5行应有一个断言。
38.每一行代码都应该以白盒测试的方式进行审读。
39.只捕捉那些你自己能够显式处理的异常。
40.如果在 catch语句块中需要抛出异常,则只抛出该catch所捕捉到的异常(或基于该异常而创建的其它异常),这样可以维护原始错误所在的堆栈位置。
41. 避免利用返回值作为函数的错误代码。
42.尽量避免自定义异常类。
43. 只把那些绝对需要的方法定义成 public,而其它的方法定义成internal。
44. 避免让你的代码依赖于运行在某个特定地方的程序集。
45.在 application assembly(EXE client assemblies)中最小化代码量。使用类库来包含业务逻辑。
46.避免显式指定枚举的值
47.避免为枚举指定一个类型
48.对于 if语句,总使用一对{}把下面的语句块包含起来,哪怕只有一条语句也是如此。
49.避免使用三元条件操作符。
50. 避免利用函数返回的 Boolean值作为条件语句。把返回值赋给一个局部变量,然后再检测。
51.总是使用以零为基数的数组。
52.总是使用一个 for循环显式的初始化一个引用成员的数组:
53.多使用属性来替代 public或protected类型的成员变量。
54.不要使用继承下来的 new操作符,使用override关键词覆写new的实现。
55.在一个非密封( non-sealed)类中,总是把那些public和protected的方法定义成virtual。
56. 除非为了和其它语言进行互动,否则绝不要使用不安( unsafe)的代码。
57.避免显示类型转换。使用 as关键词安全的转换到另一个类型。
58. 在调用一个代理前,总是检查它是否为 null。
59.不要提供 public的事件成员变量。
60.避免定义事件处理代理。
61.避免显示触发事件。
62.接口和类中方法和属性的比应该在 2:1左右。
63.避免只有一个成员的接口。
64. 保证一个界面有 3~5个成员。
65.不要让一个接口中成员的数量超过 20,而12则是更为实际的限制。
66.避免在接口中包含事件。
67.当使用抽象类的时候,提供一个接口。
68.在类继承结构中暴露接口。
68.使用显式接口实现。
70.从来不要假设一个类型支持某个接口。在使用前总是要询问一下。
71.使用 String.Empty取代””
72.避免在结构中提供方法
73.让你的应用程序支持跟踪和日志。
74. 除了要在 switch语句块中实现代码跳转,不要使用goto关键词。
75.总在 switch语句的default情形提供一个断言。
76.除了在一个构造函数中调用其它的构造函数之外,不要使用 this关键词。
77.少用 base关键词访问基类的成员
78.使用条件方法来取代显式进行方法调用排除的代码 (#if…#endif)
 
 
文档结束!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值