Net代码编写规范.docx_第1页
Net代码编写规范.docx_第2页
Net代码编写规范.docx_第3页
Net代码编写规范.docx_第4页
Net代码编写规范.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

郑州海为电子科技有限公司1目的 为了统一公司软件开发的设计过程中关于代码编写时的编写规范和具体开发工作时的编程规范,保证代码的一致性,便于交流和维护,特制定此规范。2范围本规范适用于开发组全体人员,作用于软件项目开发的代码编写阶段和后期维护阶段。3注释规范3.1概述 1) 注释建议使用英文及英文的标点符号。2) 注释中,应表明对象的完整的名称及其用途,但应避免对代码过于详细的描述。3) 每行注释的最大长度为100个字符。4) 不允许给注释加外框。5) 编码的同时书写注释。6) 重要变量必须有注释。7) 变量注释和变量在同一行,所有注释必须对齐,与变量分开至少两个“Tab”键。8) 典型算法必须有注释。9) 在循环和逻辑分支地方的上行必须就近书写注释。10) 程序段或语句的注释在程序段或语句的上一行。11) 在代码交付之前,必须删掉临时的或无关的注释。12) 为便于阅读代码,每行代码的长度应少于100个字符。3.2自建代码文件注释 对于自己创建的代码文件(如函数、脚本),在文件开头,一般编写如下注释: /* FileName: Copyright (c) 2004-xxxx *公司技术开发部 Writer: create Date: Rewriter: Rewrite Date: Impact: Main Content(Function Name、parameters、returns)*/3.3模块(类)注释模块开始建议使用以下形式书写模块注释: /Module ID:/Depiction:/Author:作者中文名 /Create Date:/如果模块只进行部分少量代码的修改时,则每次修改须添加以下注释: /Rewriter: /Rewrite Date: Start1: /* 原代码内容*/ /End1: 将原代码内容注释掉,然后添加新代码使用以下注释: /Added by: /Add date: Start2: 新代码内容 /End2:如果模块输入输出参数或功能结构有较大修改,则每次修改必须添加以下注释: /Log ID:/depiction:/Writer:修改者中文名/Rewrite Date:/3.4类属性注释 在类的属性必须以以下格式编写属性注释:/ / / 3.5方法注释 在类的方法声明前必须以以下格式编写注释/ / depiction:/ / param name=/ / /Writer:作者中文名/Create Date:3.6代码间注释代码间注释分为单行注释和多行注释:单行注释: /多行注释:/*多行注释1多行注释2多行注释3*/代码中遇到语句块时必须添加注释(if,for,foreach,),添加的注释必须能够说明此语句块的作用和实现手段(所用算法等等)。4命名总体规则 名字应该能够标识事物的特性。 名字一律使用英文单词,而不能为拼音。 名字尽量不使用缩写,除非它是众所周知的。 名字可以有两个或三个单词组成,但不应多于三个,控制在3至30个字母以内。 在名字中,多个单词用大写第一个字母(其它字母小写)来分隔。例如:IsSuperUser。 名字尽量使用前缀而不是后缀。 名字中的单词尽量使用名词,如有动词,也尽量放在后面。例如:FunctionUserDelete(而不是FunctionDeleteUser)。 文件名一般以类名一致,切遵循类命定义规则,及大小写规范。在具体任务开发中,如果有特定的命名约定,则在相应的软件开发计划中予以明确定义及上报质量管理部审计组。5命名规范5.1变量(Variable)命名5.1.1程序文件(*.cs)中的变量命名所有变量如果无前缀必须首字母小写, 前缀无特殊要求,但必须是易 于识别公认的做法, 如m_ _,切毋自创缩写过程级的变量不使用前缀 例如:public class hello void say() string SayWord; 过程的参数使用“p_”作为参数 例如:public class hello void say(string p_SayWord) 补充说明:针对异常捕获过程中的Exception变量命名,在没有冲突的情况下,统一命名为e;如果有冲突的情况下,可以重复e,比如:ee。Try /your code try /code catch(Exception ee) /your code catch(Exception e) /your code补充:如果捕获异常不需要作任何处理,则不需要定义Exception实例例:try /your codecatch( Exception )鉴于大多数名称都是通过连接若干单词构造的,必须使用大小写混合的格式以简化它们的阅读。每个单词的第一个字母都是大写. 即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如 i 或 j。 在变量名中使用互补对,如 min/max、begin/end 和 open/close。 不要使用原义数字或原义字符串,如 For (i = 1;i = 7;i+)。而是使用命名常数,如 For (i = 1;i 0ROLLBACKElseCOMMIT -提交或回滚事务时释放锁GO 在更新表中所有记录时申请排它锁,防止在提交事务之前记录受其他用户的影响.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE示例:CREATE PROCEDURE Ttesthr_UpdateASBegin transaction -开始事务SET TRANSACTION ISOLATION LEVEL SERIALIZABLE -申请排它锁,防止在提交事务之前记录受其他用户的影响Update testhr set hrcode=aaaif ERROR 0ROLLBACKElseCOMMIT -提交或回滚事务时释放排它锁GO 如果只是更新表中一行或者多行记录时使用行级锁.With (RowLock)示例:CREATE PROCEDURE Ttesthr_UpdateASBegin transaction -开始事务Update testhr with (rowlock) set hrcode=aaa where hrcode=bbbif ERROR 0ROLLBACKElseCOMMIT -提交或回滚事务时释放排它锁GOR. 程序中处理错误一般使用以下结构try代码catch错误信息finally释放有可能驻留在内存中的变量end try9.2:测试规范1 在测试前,以概要设计说明书.详细设计说明书作为总的提纲,选择合适的输入输出数据.2 按功能模块分别测试3 在测试过程中,首先需要对各子单元过程进行测试,在各子单元过程测试完毕后,再对各模块(包括各子单元过程之间的接口)进行测试,处理好各模块之间的接口,最后对系统进行测试和维护。4 测试中需要加以注意的问题:a. 数据类型不匹配.如: 姓名 string 旅行目的地 string性别 string 旅行时间 date工作单位 string (年/月/日 yy/mm/dd)身份证号码 long int 定票/取票 booleanb. 数据超出规定范围如:性别只能是男或女;身份证号码按规定必须是13位;旅行时间必须在定票的当天过一天以后; 等等c. 数据库限定必须输入的在程序中有没有检验?d. 数据库限定值为唯一的在程序中有没有检验?e. 控件datagrid的分页程序是否已写好,有没有检验?f. 控件datagrid各列的宽度是否已分配好?g. 链接是否正确?h. 代码是否已经简洁,会不会留下一些安全隐患?i. 其它意料之外有没有一定的预防代码?j. 是否符合需求?需求是否明确?5 测试原则:如果不能让自己满意的程序,他人也一样不会满意10. ASP.NET代码优化10.1页面和服务器控件处理10.1.1使用Ajax来避免到服务器的不必要的往返行程在某些情况下不必使用 ASP.NET 服务器控件和执行回发事件处理。例如,在 ASP.NET 网页中验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以进行验证或将其写入数据存储区,请避免使用导致到服务器的往返行程的代码,这样可以提高页的性能并改善用户体验。您也可以不执行整个往返行程,而是使用客户端回调从服务器中读取数据。页面类实现ICallbackEventHandler接口,注册GetCallbackEventReference方法,也就是ajax的回调实现。针对一次需要载入很多控件的页面(载入比较耗时的页面),我们可以使用ajax技术来达到一定的页面访问性能提升。10.1.2使用 Page 对象的 IsPostBack 属性来避免对往返行程执行不必要的处理如果您编写处理服务器控件回发处理的代码,有时可能需要代码仅在首次请求页时执行,而不是每次回发时都执行。根据该页是否是响应服务器控件事件生成的,使用 IsPostBack 属性有条件地执行代码。将仅需要首次请求页面时执行的代码放在IsPostBack条件中运行。10.1.3 只在必要时保存服务器控件视图状态自动视图状态管理使服务器控件可以在往返行程中重新填充它们的属性值,而您不需要编写任何代码。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能影响性能。了解在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能,这样是有帮助的。例如,如果您将服务器控件绑定到每个往返行程上的数据,因为控件的值会在数据绑定期间用新值替换,所以保存的视图状态没有用处。在这种情况下,禁用视图状态可以节省处理时间并减少页的大小。默认情况下,为所有服务器控件启用视图状态。若要禁用它,请将控件的 EnableViewState 属性设置为 false。还可以使用 Page 指令禁用整个页的视图状态。当您不从页回发到服务器时,这将十分有用。 Control 指令中还支持 EnableViewState 属性以指定是否为用户控件启用视图状态。查看视图状态的方法:若要分析服务器控件在页中使用的视图状态的大小,请通过将 trace=true 属性包含在 Page 指令中启用对该页的跟踪。然后在跟踪输出中,查看“控件层次结构”表的“Viewstate”列。下面情况基本上可以禁用viewstate:(1)页面控件 (.ascx)(2)页面不回传给自身。(3)无需对控件的事件处理。(4)控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)10.1.4 保持ASP.NET 网页的缓冲处于打开状态ASP.NET代码优化除非有特殊的原因要关闭缓冲,否则使其保持打开状态禁用 ASP.NET 网页的缓冲会导致大量的性能开销。10.1.5 Server.Transfer和Response.Redirect的选择Response.Redirect 简单地告诉浏览器访问另一个页面。Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面,可以隐藏url中传递的参数。Response.Redirect可以跨站点跳转,Server.Transfer只能同站点跳转。微软ASP.NET代码优化建议:使用 Transfer Server 对象或跨页发送的方法在同一个应用程序中的不同 ASP.NET 页之间重定向如无特殊要求,应优先选择Server.Transfer进行页面跳转10.2数据访问10.2.1将 SQL Server 和存储过程用于数据访问在 .NET Framework 提供的所有数据访问方法中,使用 SQL Server 进行数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时,可通过尽可能使用编译的存储过程而不是 SQL 命令获得额外的性能提高。(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项)10.2.2将 SqlDataReader 类用于快速只进数据游标SqlDataReader 类提供了从 SQL Server 数据库检索的只进数据流。如果您可以在 ASP.NET 应用程序中使用只读流,则 SqlDataReader 类提供比 DataSet 类更高的性能。SqlDataReader 类使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。例如,当绑定到 SqlDataSource 控件时,通过将 DataSourceMode 属性设置为 DataReader,您将获得更好的性能。(使用数据读取器会导致某些功能的丢失。)另外,SqlDataReader 类实现 IEnumerable 接口,该接口也使您可以将数据绑定到服务器控件。(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项) MySql中对应MySqlDataReader,根据需要选择。10.2.3尽可能缓存数据和页输出ASP.NET 提供了一些机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与使用 .NET Framework 的任何其他功能相比,适当地使用缓存可以更好地提高站点的性能。 在使用 ASP.NET 缓存时,应注意以下事项。首先,不要缓存太多项。缓存每个项都有内存开销。不要缓存容易重新计算和很少使用的项。其次,给缓存项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且会导致额外的代码清除和垃圾回收工作。使用与“ASP.NET Applications”性能对象关联的“Cache Total Turnover Rate”(缓存总流通率)性能计数器,您可以监视缓存中由于项到期而导致的周转。高周转率可能说明存在问题,特别是当项在到期前被移除时。(这种情况有时称作内存压力。)可以考虑把静态的、变化不大的或者不经常变化需要动态加载的内容放入控件中,使用缓存技术。% OutputCache Duration=100 VaryByParam=none %10.2.4适当地使用 SQL 缓存依赖项ASP.NET 同时支持基于表的轮询和查询通知,具体取决于所使用的 SQL Server 的版本。所有 SQL Server 版本都支持基于表的轮询。在基于表的轮询中,如果表中的任何内容发生更改,所有侦听器都会失效。这可能导致应用程序中不必要的改动。建议不要将基于表的轮询用于具有许多频繁更改的表。例如,建议将基于表的轮询用于很少更改的目录表。建议不要将基于表的轮询用于订单表,订单表具有更频繁的更新。SQL Server 2005 支持查询通知。查询通知支持特定查询,从而减少在表更改时发送的通知数量。虽然它比基于表的轮询提供更好的性能,但是它无法扩展到适应数千个查询。(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项)10.2.5使用数据源分页和排序而不是 UI(用户界面)分页和排序DetailsView 和 GridView 等数据控件的 UI 分页功能可用于支持 ICollection 接口的任何数据源对象。对于每个分页操作,数据控件查询数据源的整个数据集并选择要显示的行,并放弃其余的数据。如果数据源实现 DataSourceView 并且 CanPage 属性返回 true,则数据控件将使用数据源分页而不是 UI 分页。在这种情况下,数据控件仅查询每个分页操作需要的行。因此,数据源分页比 UI 分页更高效。只有 ObjectDataSource 数据源控件才支持数据源分页。若要在其他数据源控件上启用数据源分页,必须从该数据源控件继承并修改其行为。10.2.6平衡事件验证的安全性受益和性能开销从 System.Web.UI.WebControls 和 System.Web.UI.HtmlControls 类派生的控件可以验证事件是否源自该控件所呈现的用户界面。这样有助于防止控件响应伪造的事件通知。例如,DetailsView 控件可以防止 Delete(删除)调用(控件中本质上不支持该调用)的处理以及被操纵而删除数据。此验证会带来一定的性能开销。可以使用 EnableEventValidation 配置元素和 RegisterForEventValidation 方法控制此行为。验证的开销取决于页上的控件数量,并在几个百分点范围内。强烈建议不要禁用事件验证。在禁用事件验证之前,应该确保不会构造任何可能对应用程序具有意外影响的回发。10.2.7除非必要,否则避免使用视图状态加密视图状态加密会阻止用户能够读取隐藏视图状态字段中的值。典型情况是在 DataKeyNames 属性中带有一个标识符字段的 GridView 控件。标识符字段是协调对记录的更新所必需的。由于不想要标识符对用户可见,因此可以加密视图状态。但是,加密对于初始化具有恒定的性能开销,并具有取决于被加密的视图状态大小的附加开销。加密为每次页加载而设置,因此在每次页加载时都会发生相同的性能影响。10.2.8使用 SqlDataSource 缓存、排序和筛选如果 SqlDataSource 控件的 DataSourceMode 属性设置为 DataSet,则 SqlDataSource 能够缓存查询产生的结果集。如果以这种方式缓存数据,则控件的筛选和排序操作(使用 FilterExpression 和 SortParameterName 属性进行配置)将使用缓存的数据。在许多情况下,如果缓存整个数据集,并使用 FilterExpression 和 SortParameterName 属性进行排序和筛选,而不是使用带“WHERE”和“SORT BY”子句的 SQL 查询(对于这些查询,每个选择操作都要访问数据库),应用程序会运行得更快。(根据具体控件,仅支持部分数据库)ASP.NET代码优化的相关内容就介绍到这里,希望通过本文的讲解你对ASP.NET代码优化有所认识。11命名规则与风格(naming conventions and style)11.1命名规则11.1.1 变量命名规范类型前缀示例Array arrarrShoppingListBooleanblnblnIsPostBackBytebytbytPixelValueCharchrchrDelimiterDateTimedtmdtmStartDateDecimaldecdecAverageHeightDoubledbldblSizeofUniverseInteger intintRowCounterLong lnglngBillGatesIncomeObject objobjReturnValueShortshtshtAverageSingle sngsngMaximumString strstrFirstName11.1.2 控件命名规范类型前缀示例AdRotatoradrtadrtTopAdButtonbtnbtnSubmitCalendarcalcalMettingDatesCheckBoxchkchkBlueCheckBoxListchklchklFavColorsCompareValidatorvalcvalcValidAge CustomValidatorvalxvalxDBCheckDataGriddgrddgrdTitlesDataListdlstdlstTitlesDropDownListdropdropCountriesHyperLinklnklnkDetailsImageimgimgAuntBettyImageButtonibtnibtnSubmitLabellbllblResultsLinkButtonlbtnlbtnSubmitListBoxlstlstCountriesPanelpnlpnlForm2PlaceHolderplhplhFormContentsRadioButtonradradFemaleRadioButtonList radlradlGenderRangeValidatorvalgvalgAgeRegularExpressionvalevaleEmail_ValidatorRepeaterrptrptQueryResultsRequiredFieldValidatorvalrvalrFirstNameTabletbltblCountryCodes TableCelltblctblcGermanyTableRowtblrtblrCountryTextBoxtxttxtFirstNameValidationSummaryvalsvalsFormErrorsXMLxmlcxmlcTransformResults11.1.3 ADO.NET控件命名规范 类型前缀示例ConnectionconnconnNorthwind CommandcmdcmdReturnProductsParameterparmparmProductIDDataAdapterdadaProductsDataReaderdtrdtrProductsDataSetdsdsNorthWindDataTabledtdtProductDataRowdrdrRow98DataColumndcdcProductIDDataRelationdreldrelMasterDetailDataViewdvwdvwFilteredProducts11.1.4 命名规则补充Form frmClass cls/CModule modGroupBoxgrpPictureBox picComboBoxcboTreeViewtvwListView lvwTabControltabDateTimePickerdtpTimer tmrSplitter splProgressBarpbarRichTextBoxrtfImageListimglToolBartlbMenuItemmnu12代 码 编 写 规 范总 则一、 本总则提供编码的总体要求与遵循原则。二、 本总则制订是为了规范程序的编码风格,使项目开发过程中所有开发人员的编码有一个良好的、规范的、统一的编码风格,确保在开发成员或开发团队之间的工作可以顺利交接,同时不必花费大力气便能理解已编写的代码,以便继续维护和改进以前的工作。三、 本总则对所有技术开发部编码人有效。四、 本总则对所有开发语言有效,凡任何开发规范与本总则相冲突,以本总则为准。五、 本总则提供各种语言的编码规范,编码人员开发(编码)前应选取相应的语言编码规范进行编码。具体的“开发语言编码规范”请参见附件。六、 若总则附件中无所规范的开发语言规范,请先制订出(一般由项目经理制订)该语言的编码规范后再进行编码。七、 编码命名准则:1、 使用可以准确说明变量/字段/类的完整的英文描述符。例如,采用类似 firstName,grandTotal 或 CorporateCustomer 这样的名字。禁止使用一些象 x1,y1 或 fn 这样的名字很简短,输入起

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论