代码改变世界

读《.NET设计规范》之命名规范的总结

2012-02-09 22:07  stevey  阅读(2092)  评论(9编辑  收藏  举报

  《.NET 设计规范》是数千名微软精锐开发人员的经验和智慧,最终浓缩在这本设计规范之中。它指导着.NET Framework几个版本的开发,和微软windows操作系统的下一代API---WinFX开发。上面这些话是C#之父说的,不是我。它指导着微软内部开发规范,可见是一本非常好的书,而且博客园的其他大牛也推荐过的,是一本修炼内功的武功秘籍。

 

为什么需要命名规范?

1、提高框架的可用性,一致性。使的不同项目的开发人员使用同一个框架成为可能。大到一个Framework,小到一些控件(Grid)或者封装的库,他们中的API都是为其他开发者所使用的,固良好的命名很重要。就比如:.NET Framework它里面的命名,开发组就花费了大量的时间,大量的讨论,甚至非常高的代价去做,并认为是非常重要的。

2、增加代码的可读性。良好的命名可以是代码易于理解,从名字上面就可以大概知道它的功能,一目了然。使得开发人员相互的沟通更为畅通。如果一个人的代码写的非常规范,那么其他人在阅读或者维护的时候,就比较容易了,可见从命名规范上就可以看出一个人境界。

 

标示符的大小写规范

  1、PascalCasing。随着Pascal(Turbo Pascal最初的设计师-Anders Hejlsberg-C#之父 )编程语言的流行起来的大小写风格称为PascalCasing。它被用于除了参数名之外的所有标示符,每个单词的首字母都大写。如:ObjectContext,HtmlTag

  2、camelCasing。这种大小写风格看上去就像一个驼峰。它仅仅用于参数的名字。除了第一个单词小写之外,其他单词首字母都大写。如:userName,htmlTag。

 

首字母缩写与单词缩写

  像首字母缩写词(比InputOutput首字母缩写词为IO)为两个的,他们要么全部大写,要么全部小写,如IOStream,ioStream。但首字母缩写词的长度超过2个,则视为一个单词,如Html,Xml,html,xml等。

  首字母缩写是将一个短语的首字母组成,而单词缩写仅仅把一个单词的长度变短。请尽量使用已经被世人认可的首字母缩写词,单词缩写尽量的不用,因为这样会降低可读性的。例如该书上给出一个例子,在.NET 框架中有Color.FromArgb方法,它是一个缩写过度的例子,Argb让人联想到是参数b,arg如果是argument的缩写,这显示不是API设计者的本意。在这里A表示的是alpha通道,所以如果设计成这样Color.FromAlphaRgb或许更符合规范。但.FromArgb API已经随框架中发布出去,就不能随便改了。

复合词

  复合词应该视为一个单词。如endpoint,Endpoint,常见术语大小写,在这里列出容易写错的一些。Pascal\camel :Callback\callback、Email\email、Gridline\gridline、Hashtable\hashtable、Id\id、Namespace\namespace、Ok\ok、Pi\pi、SignIn\signIn、LogOn\logOn

单词的选择

  1、要选择易于阅读的名字

  2、要看重可读性,而不是更看重简洁性。如:GetWindow要比GetWin要好

  3、不要使用下划线,连字符及其他任何既非数字字母的字符。

  4、不要使用匈牙利命名法。匈牙利命名法是用一些前缀,比如uiCount表示无符号整数,intCount,在这里ui或者int的前缀。但我们在私有实例字段时候,可以考虑加上前缀m_,如m_count ,这样区别于其他成员,该私有实例字段暴露给外界使用属性,属性的命名采用PascalCasing。给私有静态字段加前缀s_,便于区分,这并不和上面的规范冲突,规范是人约定的,合适的变通,才是王道。对于现代的编辑器来说,将鼠标放在变量上面,就会提示出类型。

  5、避免使用与广泛编程语言有冲突的标示符。

 

  在为已有API新增版本命名时候,优先使用后缀来表示已有API的新版本。因为Intellisense会把它们的位置放的很近。或者考虑新的名字。

 

总结

1、除了参数用camelCasing之外,其他大部分都是PascalCasing命名约定。

2、标示符要使用有意义的名字。如GetLength比GetInt要好,不要嫌单词很长(有自动补全功能),不要使用自创的单词一部分。

3、标示符的含义要比含有类型更为重要。如形参(string value)而不是(string str),在这里value表示一个值,而str表示出它的类型是string。在如foreach(string item in collection){}中的item。

4、不要在变量名或者参数命中使用下划线。如果一个标示符中的单词可有可无,那还是去掉,这样简洁些。

5、模仿学习框架中的命名,如果你的代码和框架的代码无法区分时,那么你的代码就相当的牛X了

 

  本为主要目的是让大家了解基本的命名约定,或者能帮助大家对命名规范有些重要的认识,就满足了。当然《.NET 设计规范》 命名规范这章中,还有其他的一些规范,没有列出,请有兴趣的同学自己去看了,谢谢!文中描述如果有不妥之处,还请高手指出,我们共同进步,谢谢!