这本书虽然是讲述.net框架设计的一些规范,不过仍然有一些通用的设计准则可以参考
命名规范:
这些只有在用于公开暴露给外界的API时才是必需的
标识符大小写规则:
1.要把PascalCasing用于由多个单词构成的名字空间,类型以及成员的名字
2.要把camelCasing用于参数的名字
3.不要把闭合形式的复合词中每个单词的首字母大写,比如 callback, endpoint 等等,可以查阅英语词典来确定复合词是不是闭合的
4.不要使用匈牙利命名法。原因有几点,一是发明它的ms公司都已经明确要求在新的库在不要使用这种命名法,二是变量名前加类型标识符是个很不好的习惯,在开发过程中有可能会随时修改这些变量的类型定义,三是新的编辑器中不需要用m_前缀来确定其类型,不过对于内部实现的变量来说,用一个前缀也许会让变量的查找更方便,比如用一个_前缀
5.不要使用未被广泛接受的首字母缩写词,如何确定某个缩写词是否众所周知有个好方法,到google上搜索一下,如果前几条都是你所期望的内容,那么它就是众所周知的了
关于命名:
1.要用名词或名词短语来给类和结构体命名,使用PascalCasing的大小写风格,类名字不要加 C,但是接口前需要加 I,这是个特例
2.用形容词短语来给接口命名,在少数情况下也可以使用名词或名词短语
3.考虑在派生类的末尾使用基类的名字,比如 class FileStream : public Stream
4.用动词或动词短语来命名方法,比如 int CompareTo();
5.要用肯定性的短语(CanSeek而不是CantSeek)来命名布尔属性,可以加Is,Can,Has等前缀,要确保使用时的测试语句读起来通顺,比如
if (collection.Contains(item)) 就比 if (collection.IsContained(item)) 要通顺得多
此外,要优先选择主动语态而不是被动语态,比如
if (stream.CanSeek()) 就比 if (steam.IsSeekable()) 要强得多
6.要用现在时和过去时来赋予事件名以之前和之后的概念,不要用Before或After这样的前后缀,比如 Closing, Closed而不是AfterClose
使用规范:
1.优先使用集合,避免使用数组
2.考虑使用不规则数组,而不要使用多维数组,也就是优先使用int [][] jagedArray这样的数组,避免使用 int [,] multiDimArray这样的类型
3.要用最泛的类型来作为参数类型,大多数以集合为参数的成员都使用IEnumerable 接口