Web系统开发实践中整理的常用编程规范

上传人:沈*** 文档编号:168604104 上传时间:2022-11-11 格式:DOC 页数:12 大小:85.50KB
返回 下载 相关 举报
Web系统开发实践中整理的常用编程规范_第1页
第1页 / 共12页
Web系统开发实践中整理的常用编程规范_第2页
第2页 / 共12页
Web系统开发实践中整理的常用编程规范_第3页
第3页 / 共12页
点击查看更多>>
资源描述
C#编程规范 Version 1.0目录第一章概述3规范制定原则3术语定义3Pascal 大小写3Camel 大小写3文件命名组织31.3.1文件命名31.3.2文件注释3第二章 程序注释53.2文档型注释53.4单行注释53.5类注释53.6方法注释5第三章命名规范65.1类65.2接口65.3参数65.4方法65.5属性 (property)75.6常量 (const)75.7成员变量75.8静态成员变量75.9控件的事件处理函数7第四章 控件命名规则87.1命名方法87.2主要控件名简写对照表8第一章概述规范制定原则 1 方便代码的交流和维护。 2 不影响编码的效率,不与大众习惯冲突。 3 使代码更美观、阅读更方便。 4 使代码的逻辑更清晰、更易于理解。术语定义Pascal 大小写 将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更多字符的标识符使用Pascal 大小写。例如: BackColorCamel 大小写标识符的首字母小写,而每个后面连接的单词的首字母都大写。例如: backColor匈牙利命名法基本原则是:变量名=属性+类型+对象描述。在C+中大量使用,从变量名即可快速识别变量的类型和含义。例如: lpszName lpsz表示LPCSTR 32位常量字符串指针。*由于在C#和Java中,编译器有强大的类型检测功能,而脚本语言又都是泛型变量,匈牙利命名法的属性前缀就显得多余了,因此现在匈牙利命名法基本已经弃用。文件命名组织1.3.1文件命名1 文件名遵从Pascal命名法,无特殊情况,扩展名小写。2 使用统一而又通用的文件扩展名: C# 类.cs1.3.2文件注释 1 在每个文件头必须包含以下注释说明 /*- / Copyright (C) 2004 XXXX有限公司 / 版权所有。 / / 文件名: / 文件功能描述: / / / 创建标识:包括人员和日期信息 / / 修改标识: / 修改描述: / / 修改标识: / 修改描述:/-*/文件功能描述只需简述,具体详情在类的注释中描述。创建标识和修改标识由创建或修改人员的拼音或英文名加日期组成。如: LiSi 一天内有多个修改的只需做一个在注释说明中做一个修改标识就够了。在所有的代码修改处加上修改标识的注释。第二章 程序注释在程序逻辑的关键位置,比如ifelse,要为每个分支都添加注释。使用算法,比如起泡排序,也需要使用注释说明一下。3.2文档型注释 /MyMethod is a method in the MyClass class./Heres how you could make a second paragraph in a description./ /for information about output statements./ / / public static void MyMethod(int Int1) 3.4单行注释 / 注释语句 private int _number;3.5 类注释/ / This class is the code-behind login page./ Handle some event from page./ author Yu Yang/ version 1.00 Date: 2013/12/04/ public partial class Login : System.Web.UI.Page 3.6 方法注释/ / This function is used to check the validity of user by / invoking the interface of UM module / / the account of user / the password of user / true: the current user is valid / false: the current user is invalid private bool IsValidUser(string userName, string password)第三章命名规范 5.1 类类命名遵守Pascal规范 public class FileStream public class Buttonpublic class String 5.2 接口以大写字母I打头,接口的功能描述采用Pascal命名法。 以下是正确命名的接口的示例。 public interface IServiceProvider public interface IFormatable5.3 参数 参数名称使用 Camel 规范 Type GetType(string typeName)string Format(string format, args() As object)5.4 方法 以下规则概述方法的命名指南: 1 使用动词或动词短语命名方法。 2 使用 Pascal 大小写。 RemoveAll() GetCharArray()Invoke()5.5 .NET属性 (property)遵守Pascal规范 public String Name get;set; 5.6 常量 (const) 以下规则概述常量的命名指南: 所有单词大写,多个单词之间用 _ 隔开。 如 public const string PAGE_TITLE = Welcome; 5.7 成员变量Camel命名法,在变量名前加下划线“_”Private string _yourName*切忌:不使用C+的成员变量规范m_YourName5.8 静态成员变量 使用 Pascal 大小写。 (注意和常量定义的区别)Private static string YourName5.9 页面控件名使用Camel命名法。TextBox txtName;5.10 控件的事件处理函数按照控件命名规则自动生成。如果自定义事件,也采用此格式来定义事件处理方法。protected void btnLogin_Click(object sender, EventArgs e) 第四章 控件命名规则7.1命名方法控件名简写+英文描述,英文描述首字母大写(匈牙利命名法的变种使用)7.2主要控件名简写对照表(根据具体项目使用的第三方控件库而定)控件名 简写 控件名 简写Label lbl TextBox txtButton btn LinkButton lbtnImageButton ibtn DropDownList ddlListBox lst DataGrid dgDataList dl CheckBox chkCheckBoxList chkls RadioButton rbtnRadioButtonList rbtnls Image imgPanel pnl Calender cldAdRotator ar Table tblRequiredFieldValidator rfv CompareValidator cvRangeValidator rv RegularExpressionValidator revValidatorSummary vs CrystalReportViewer rptvew第五章 Javascript命名规则5.1 Prototype类类和命名空间的命名遵守Pascal规范,这点和C#类似 注册命名空间Type.registerNamespace(WFF.UI);声明一个类 WFF.UI.WFFCascadingComboExtender = function(element) 5.2 接口与类得声明类似,以下是正确命名的接口的示例。WFF.UI.IUserControl = function(element) 5.3 参数 参数名称使用 Camel 规范 onPageLoad: function(sender, eventArgs)5.4 方法 以下规则概述方法的命名指南: 1 使用 Camel 规范。 2 以前缀区分私有和公有方法。 removeAll():这是一个公有方法_invoke():这是一个私有方法 在方法体内部定义的临时方法变量使用全小写定义,且单词之间使用“_”分隔。例如:var remove_test = function(param1, param2);5.5 属性 (property)遵守Camel规范,写法类似java中的属性,使用get/set方法对,之间用“_”连接。比如有个一个变量_accountName,将其封装为属性,如下:get_accountName: function()set_accountName: function(accountName)5.6 常量 (const)或静态变量(static) 以下规则概述常量的命名指南: 所有单词大写,多个单词之间用 _ 隔开。 如 WFF.WFFUtilities.PAGE_TITLE = Welcome; 5.7 成员变量Camel命名法,在变量名前加下划线“_”this._yourName = “Lily”;5.8 页面控件名使用Camel命名法。在控件ID前加前缀区分dom元素和js控件。Dom元素:this._dom_ibtnSearch:一个普通的搜索input按钮元素对象this._ctl_rgeSearchRoles:一个telerik的gird的前端控件对象jquery插件:在dom控件名前加上“$”符,例如:this._$ibtnSearch,如果只是过程变量,则使用var $ibtnSearch = $(#xxx)即可。5.9 控件的事件处理函数按照控件命名规则生成(控件ID+委托事件名),考虑到事件处理方法一般都设置为私有的,因此在该方法前最好加上“_”_ibtnSearch_Click: function(sender, args) JavaScript语法相对是比较灵活的,而且是解释型的语法,需要更多的编写注释,帮助代码修改阅读。5.10 需要注意的一些编程习惯变量声明所有的变量必须在使用前进行声明。JavaScript并不强制必须这么做,但是这么做可以让程序易于阅读,且也容易发现那些没声明的变量(它们会被编译成全局变量)。将var语句放在函数的首部。最好把每个变量的声明语句单独放到一行,并加上注释说明。所有变量按照字母排序。var currentEntry; / 当前选择项var level; / 缩进程度var size; / 表格大小JavaScript没有块范围,所以在块里面定义变量很容易引起C/C+/Java程序员们的误解。在函数的首部定义所有的变量。尽量减少全局变量的使用。不要让局部变量覆盖全局变量。内函数的声明不要在块内声明一个函数不要写成:if (x) function foo() 建议使用函数变量:if (x) var foo = function() 闭包(这个比较复杂)闭包也许是 JS 中最有用的特性了。有一点需要牢记, 闭包保留了一个指向它封闭作用域的指针, 所以, 在给 DOM 元素附加闭包时, 很可能会产生循环引用, 进一步导致内存泄漏. 比如下面的代码:function foo(element, a, b) element.onclick = function() /* uses a and b */ ; 这里, 即使没有使用 element, 闭包也保留了 element, a 和 b 的引用, . 由于 element 也保留了对闭包的引用, 这就产生了循环引用, 这就不能被 GC 回收. 这种情况下, 可将代码重构为:function foo(element, a, b) element.onclick = bar(a, b); function bar(a, b) return function() /* uses a and b */ 或者使用匿名函数来代替bar(a,b)for-in 循环只允许用于 object/map/hash 的遍历。对 Array 用 for-in 循环有时会出错. 因为它并不是从 0 到 length - 1 进行遍历, 而是所有出现在对象及其原型链的键值。(例如Array的Prototype构造器被改写或增加方法。)而遍历数组通常用最普通的 for 循环,且注意在for之前先将length值取出,不用将length属性的调用放置到for循环体中去。function printArray(arr) var l = arr.length; for (var i = 0; i l; i+) print(arri); Array直接赋值使用 Array 和 Object 语法, 而不使用 Array 和 Object 构造器.例如:var a3 = new Array(x1); / Length is 0.如果传入一个参数而不是2个参数, 数组的长度很有可能就不是你期望的数值了.为了避免这些歧义, 我们应该使用更易读的直接量来声明.var a = x1, x2, x3; var a2 = x1, x2; var a3 = x1; var a4 = ;Object直接赋值Object 构造器没有上述类似的问题, 但鉴于可读性和一致性考虑, 最好还是在字面上更清晰地指明.例如:var o = new Object(); var o2 = new Object(); o2.a = 0; o2.b = 1; o2.c = 2; o2strange key = 3;最好还是写成:var o = ; var o2 = a: 0, b: 1, c: 2, strange key: 3 ;5.11 JavaScript的小技巧快捷的True 和 False 布尔表达式判定下面的布尔表达式都返回 false: null undefined 空字符串 0数字0但小心下面的, 可都返回 true: 0字符串0 空数组 空对象下面段比较糟糕的代码:while (x != null) 你可以直接写成下面的形式(只要你希望 x 不是 0 和空字符串, 和 false):while (x) 如果你想检查字符串是否为 null 或空:if (y != null & y != ) 但这样会更好:if (y) 条件(三元)操作符 (?:)三元操作符用于替代下面的代码:if (val != 0) return foo(); else return bar(); 你可以写成:return val ? foo() : bar();& 和 |二元布尔操作符是可短路的, 只有在必要时才会计算到最后一项.| 被称作为 default 操作符, 会一直计算到返回true的那一项,因为可以这样:function foo(opt_win) var win; if (opt_win) win = opt_win; else win = window; / . 你可以使用它来简化上面的代码:function foo(opt_win) var win = opt_win | window; / . & 也可简短代码.会一直计算到返回false的那一项,比如:if (node) if (node.kids) if (node.kidsindex) foo(node.kidsindex); 你可以像这样来使用:if (node & node.kids & node.kidsindex) foo(node.kidsindex); 不过这样就有点儿过头了:node & node.kids & node.kidsindex & foo(node.kidsindex);使用 join() 来创建字符串通常是这样使用的:function listHtml(items) var html = ; for (var i = 0; i 0) html += , ; html += itemHtml(itemsi); html += ; return html; 但这样在 IE 下非常慢, 可以用下面的方式:function listHtml(items) var html = ; for (var i = 0; i items.length; +i) htmli = itemHtml(itemsi); return + html.join(, ) + ; 你也可以是用数组作为字符串构造器, 然后通过 myArray.join() 转换成字符串. 不过由于赋值操作快于数组的 push(), 所以尽量使用赋值操作.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!