[TCL-EP-009]程序员开发手册

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SharePointCodingStandard一、编码规范的设定规则:编程语言和开发环境所要求必须遵守的。约定:不是语言的一部分,而是一种编码风格,最重要的是要有统一的标准。二、编码规范的作用1、规范化(公司的角度)企业文化的一种需要,统一的风格有助于提高公司产品质量,降低开发成本,而且提高了公司凝聚力,当所有人都接受并执行一个统一的规范时,也就相当于形成了一个统一的文化。2、专业化(个人的角度)提高工作效率的同时,统一的规范会提高代码质量,从而提高个人的专业素养。3、高效(工作的角度)开发:协同开发写程序的需要,在一个开发组里,执行统一规范会增加代码融合度,减少开发中的沟通成本。程序员可以了解任何代码,弄清程序的状况而无需去猜测某段代码在干什么。维护:编码规范使程序更易于维护,无论是本人还是同事都需要,统一的规范可以让每个人都能看懂别人的代码从而进行维护。减少bug:在一致的环境下,开发者可以减少出犯错的机会。编码风格最重要的两点可读性它是良好的编码风格最突出的表现。一致性它是良好的编码风格最重要的准则。三、编码规范详细设定在我们公司的使用中,以Microsoft推荐的编码标准为基准,结合本公司的实际情况和通用习惯设定了如下的规范。(一)命名规则1.命名时的基准规则Pascal大写—所有单词第一个字母大写,其他字母小写。RestoreDocumentForSharepointCamel大写—除了第一个单词,后面所有单词第一个字母大写,其他字母小写。restoreDocumentForSharepoint2.总体规范标识符的长度应当符合“min-length&&max-information”原则。名字要有意义,用描述性的词语来命名,能通过名字知道它的功能(用于循环迭代的变量例外)。避免缩写。如果这样造成命名过长的话可以改在注释中。但是常见的首字母缩写可以使用。例如:SP、IE等名字中不要加下划线,除非特殊情况。不要和关键字冲突。不要通过大小写的不同来区分名字。Countcount在命名中禁止出现以个人名字命名的一切代码。禁止在代码的任何段落中出现脏话及不良用语。缩写词不要全部使用大写字母,无论如何,当遇到以下情况,你可以用首字母大写其余字母小写来代替全部使用大写字母的方法来表示缩写词。使用:GetHtmlStatistic.不使用:GetHTMLStatistic.3.类的命名规范用名词或名词短语命名类。使用Pascal大写publicclassFileStream{}不加任何类前缀。文件名和类名要匹配。对于类HelloWorld,相应的类文件名也应为HelloWorld.cs。当类只用作其他类的基类时,以Base结尾。ClassCarBase4.接口的命名规范使用名词或名词短语,或者描述行为的形容词来命名接口。使用Pascal大写。ICarComponent在接口名前加前缀I,以表示这个类型是一个接口。(注意例如,IdentityStore。)一对类/接口组合名称要相对应,两个名称的不同之处只是接口名前有一个I前缀。publicinterfaceIComponent{}publicclassComponent:IComponent{}5.方法的命名规范通常每个方法和函数都是执行一个动作的,所以对它们的命名应该清楚的说明它们是做什么的:用CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。这么做也可以使功能和数据成为更可区分的物体。用动词或动词短语命名方法。使用Pascal大写。RemoveAll()。6.变量的命名规范局部变量和方法参数:使用Camel大小写形式。inttotalCount=0;成员变量:沿用VC的规范,m开头,其后用Pascal大写。privateintmTotalCount=0;静态变量:以s开头,其后用Pascal大写。staticintsTotalCount;7.常量的命名规范常量的每一个字母都应该大写。constintSYSTEMID=100;conststringSYSTEMNAME=“TestM”;8.属性的命名规范用名词或名词短语命名。用Pascal大写命名属性。成员变量与其属性的差别只在于第一个字母m。成员变量mWebName对应属性WebName属性与变量的类型要统一。9.命名空间的命名规范用Pascal大写命名。使用有意义的名字定义命名空间,如产品名或者公司名。把System系列命名空间组织到一起放上面,第三方提供的命名空间放到系统命名空间下面。为每一个命名空间创建一个目录,这样可以更容易地将命名空间映射到目录层次划分。用MyProject/TestSuite/TestTier作为MyProject.TestSuite.TestTier的路径。我们公司的命名空间以xxx开头,例如:xxx.Migrator(二)格式化规范这里大部分的格式规范都可以用VS2005的自动化格式功能实现。缩进用TAB,不用SPACES。对与最大缩进层数,并没有一个固定的规矩,假如缩进层数大于四或者五层的时候,你可以考虑着将其代码因数分解。在每个运算符前后都空一格。用一个空行来分开代码的逻辑分组。在一个类中,各个方法需用一空行,也只能是一空行分开。花括号{}需和括号外的代码对齐。每个花括号需独立一行。If、for、while、do等语句自占一行,不论执行语句多少都要加“{}”很长的程序行应该进行拆分。当一行被分为几行时,通过将串联运算符放在每一行的末尾而不是开头,清楚地表示没有后面的行是不完整的。每一行上放置的语句避免超过一条。在逗号后换行。在操作符后换行。在高层换行而不要在低层处换行。折行后对齐上一行语句同一层的表达式起始位置。(三)结构设计规范1、工程设计规范各个project的输出路径要一致,一般情况下是”..\..\bin\Release\”.在各个工程文件里把应用到的dll所属的project都应用进来,这样可以保证应用不会出错。所有的目录下都需要具有README文档,其中包括:该目录的功能及其包含内容,一个对每一文件的在线说明(带有link),每一个说明通常还应该提取文件标头的一些属性名字。包括设置、使用说明,指导人民如何连接相关资源:源文件索引、在线文档、纸文档、设计文档、其他对读者有帮助的东西。考虑一下,当每个原有的开发人员走了,在6个月之内来的一个新人,那个孤单的探险者通过阅读说明文件,源文件的标头说明等等,就应该有能力维护整个工程。2、文件名命名规范模块名称、输出文件名称、二进制文件名称应该由部长或组长制定,并且需要符合公司这方面的规定。(前缀带公司名缩写、不要空格等)产品名称.环境信息名称.主功能名称.[子功能名称.[子功能名称…]].exe,例如:xxx.yy.Backup.Browser.exe/dll/wsp,不允许使用下划线,空格等。单词首字母大写。避免出现AaBbBb这样的命名方式。3、类文件编写规范避免在同一个文件中放置多个类。避免使用大文件。如果一个文件里的代码超过1000行,必须考虑将代码分开到不同类中,并且要有效的利用好region。在最靠近一个局部变量被使用的地方声明该局部变量。在定义变量(或参数)时,要将修饰符*和&紧靠变量名。重要类结构的public,protected,private顺序在所有的程序中应保持一致。程序中不要出现名字相同的局部变量和成员变量。代码文件保存需要保存成utf-8格式。在保存新文件时选择File-AdvancedSavedOptions,再选择Unicode(UTF-8…).4、方法编写规范避免写太长的方法。如果一个方法代码超过50行,应该考虑按不同操作将其分解为不同的方法,这样各个功能可以很容易被重用,而且各个方法内的代码改变也很容易理解。上限为200行。一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。避免写超过5个参数的方法。如果要传递多个参数,要使用结构来完成。避免使用很多成员变量。应该声明局部变量,并传递给方法。不要在方法间共享成员变量。否则很难知道是哪个方法在什么时候修改了它的值。参数命名、顺序合理。如果使用类型和数目不确定的参数,需要特殊注意并在注释中写明白其用途。不要省略了函数返回值的类型。函数名字与返回值类型在语义上不要冲突。不要将正常值和错误标志混在一起返回,正常值应当用输出参数获得,而错误标志用return语句返回。重要的一行代码应该只做一件事,如只定义一个变量,只写一条语句。如果代码行中的运算符比较多,要用括号清楚地确定表达式的操作顺序。不要编写太复杂或者多用途的复合表达式,复杂的表达式不能表明设计者技术更好,只会带来维护上的困难。5、常量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。如果某一常量与其它常量密切相关,要定义中包含了这种关系。6、变量变量的初始化或缺省值要准确,应该在任何情况下都不引起错误。变量使用时注意上溢或下溢。变量使用时注意精度。对一个数值变量采用的不是0,-1,1等常用的数值初始化时,给出选择该值的理由。别把成员变量声明为public或protected。一般声明为private而使用public/protected的Properties。7、数据类型变量的数据类型应该符合其定义。减少并谨慎使用不同数据类型的之间的赋值,避免精度损失或者赋值后类型错误。不要进行不同数据类型的比较,除非特殊情况。尽量使用C#特有类型,而不是System命名空间中定义的别名类型。好:intage;stringname;objectcontactInfo;不好:Int16age;Stringname;ObjectcontactInfo;8、逻辑判断要注意精度原因导致比较无效问题。要注意表达式中的优先级是否正确。逻辑判断结果要符合常规,不要颠倒。字符串比较时要注意大小写,如果不大小写敏感的时要使用,Name.Equals(excludeItem.Name,StringComparison.OrdinalIgnoreCase)不要用隐含错误的方式写if语句?例如:(1)将布尔变量直接与TRUE、FALSE或者1、0进行比较。(2)将浮点变量用“==”或“!=”与任何数字比较。(3)将指针变量用“==”或“!=”与NULL比较。总是将恒量放在等号/不等号的左边,例如:if(6==$errorNum)...一个原因是假如你在等式中漏了一个等号,语法检查器会为你报错。第二个原因是你能立刻找到数值,而不是在你的表达式的末端找到它。需要一点时间来习惯这个格式,但是它确实很有用。9、循环问题如果循环体内存在逻辑判断,并且循环次数很大,要将逻辑判断移到循环体的外面。要注意循环终止条件是否正确谨慎使用无法正常终止(死循环)的循环。在循环里不要错误地修改循环变量。要注意误差累积对结果的影响。Case语句的结尾要加break。写switch时要加default分支。defaultcase总应该存在,它应该不被到达,然而如果到达了就会触发一个错误。Switch中如果你要创立一个变量,那就把所有的代码放在块中。Case0:{inti=0;}Continue和break其实是变相的隐蔽的goto方法,要谨慎使用。10、Mutex的管理1)在使用前充分认识Mutex,例如:A.Mutex应该在finally{}里释放(否则异常情况会导致Mutex释放操作被跳过)B.注意释放Mutex有时会引起异常。C.请确认Mutex在线程或者进程结束前被释放。(在正常流程中,应该避免杀死线程和进程操作,这样操作可能会导致释放操作被忽略)D.

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功