.NET设计规范————命名规范
net设计规范:约定、惯用法与模式———命名规范
前言:
最近在看《.net设计规范:约定、惯用法与模式》一书,主要还是讲.net的设计规范,以前对这一块也不是特别在意,最近想要把这些的学习一下,以下基本上算是笔记吧。
第三章命名规范
3.1 大小写约定
使用合适的大小写可以使类型、成员以及参数的标识符更容易
3.1.1 标识符大小写原则
为了区分一个标识符中的多个单词,把标识符中的每个单词的首字母大写,有以下两种合适的方法来大写标识符中的字母,如下:
l pascal casing
l camel casing
pascalcasing约定被用于除了参数名之外的所有标识符,它把标识符中的每个单词的首字母大写。如下所示:
propertydescriptor
html
两个字母长的首字母缩写词是一个特例,在这种情况下两个字母都要大写,如下所示:
iostream
camel casing约定仅用于参数的名字,它把标识符中除了第一个单词之外的所有单词的首字母都大写。如下所示:
propertydescriptor
html
iostream(标识符以两个字母长的的首字母缩写词开始,两个字母都要小写)
标识符基本大小写规范:
要把pascal casing用于多个单词构成的名字空间、类型以及成员的名字。
要把camel casing用于参数的名字。
不同类型的标识符的大小写规则如下:
3.1.2 首字母缩写词的大小写
避免在标识符的名字中使用首字母缩写词是很重要的,除非他们很常用,能够被使用框架的人立刻理解,如:html、xml等。
从定义上讲首字母缩写词必须至少有两个字母。由三个或以上的字母组成的首字母缩写词遵循与其他单词一样的规范:只有第一个字母大写,除非是camelcasing风格的参数名中的第一个单词,在这种情况下两个字母都小写。如下所示:喎?https: www.2cto.com/kf/ware/vc/"="" target="_blank" class="keylink">vcd48cd5qdwjsawmgdm9pzcbtdgfydelpo6htdhjlyw0gaw9tdhjlyw2jrgjvb2xjbg9zzulpu3ryzwfto6k8l3a+pha+uhvibgljihzvawqgug9yy2vzc0h0bwxuywejqhn0cmluzybodg1svgfno6k8l3a+pha+phn0cm9uzz7sqrdrwb249tfwxli1xmrx19beumv10ls0ysirsr+089c0o6yz/bfhy/zkx2nhbwvsq2fzaw5nt+e48bxess7k/cp7tcs12tk7upa1pbtkpc9zdhjvbmc+pc9wpjxwpln5c3rlbs5jtzwvcd48cd5qdwjsawmgdm9pzcbtdgfydelpkfn0cmvhbwlvu3ryzwftktwvcd48cd48c3ryb25nptkqsnhtycj9upa78sj9upbs1mnp19beunfps8m1xmrx19beumv10ls0yrxetdrsu7j219beultz0lsho7p9t8fl/mrhy2ftzwxdyxnpbme357jxtcsyzsr9w/u1xlxa0ru49rwltmo8l3n0cm9uzz48l3a+pha+u3lzdgvtllhtbdwvcd48cd5qdwjsawmgdm9pzfbyb2nlc3nidg1svgfnkhn0cmluzybodg1svgfnktwvcd48cd48c3ryb25nprk70qqw0wnhbwvsq2fzaw5nilfnupg1xlhqyra3+823sr+1xmjous7k19fwxljl9dc0tmq1xmjous7x1ss4tppqtkoszt7c28rx19beumv10ls0yrxes6s2ymrhtudj2twvc3ryb25npjwvcd48adq+my4xljmguls6z7tkus2zo9pdyvxt77xetppqodc0pc9ond48cd7u2snmvlc089ch0ltksaostpo24mr9uls6z7tkyvxt79kq1/foqrwlupa1pbtktkba7agjpc9wpjxwpjxzdhjvbmc+srvsqrdry/novbhvus/qzsq9tcs4tlrptmrw0mo/upa1pbtktctk19fwxli089c0oam8l3n0cm9uzz48l3a+pha+wp3i56o6zw5kcg9pbnsjrm6qwcvns9k7tppqodc0uea3tqosztldx7drsdw6z9doyr21xli0us+0ytf3zqrsu7j2taw0yrsmwo2hozwvcd48cd6zo9pdtcs4tlrptmq6zboj08pk9dpvtcs089ch0ls8sma00lsjrmjnz8lnvmv5yr6jujwvcd48cd48aw1nihnyyz0="https://www.2cto.com/uploadfile/collfiles/20160328/20160328091428666.png" alt="\" />
上边的示例中有两个常用的的其他术语,ok和id,它们本身是一个类别,因为它们是俚语性质的常用缩写
3.1.4 是否区分大小写
不要以为所有的编程语言都是区分大小写的,实际情况并非如此,不应该仅仅通过大小写来区分名字。
3.2 通用命名约定
本章描述一些通用的命名约定,涉及到单词的选择、单词缩写、首字母缩写词的使用规范以及如何避免使用编程语言特有的名字。
3.2.1 单词的选择
对于框架中标识符的名字最重要的一点是一目了然。名字意思清楚比长度短更重要,应该与场景、系统的逻辑组成或物理组成以及为人熟知的概念相对应,不应该与技术活架构相对应。
主要有以下几点:
要为标识符选择易于阅读的名字。
要更看重可读性,而非简短性。
不要使用下划线、连字符以及其他任何既非字母也非数字的字符。
不要使用匈牙利命名法。
避免使用与广泛使用的编程语言的关键字有冲突的标识符。
3.2.2 使用单词缩写和首字母缩写词
不要使用缩写词和缩约词作为标识符名字的一部分。
不要使用未被广泛接受的首字母缩写词(即使是被广泛接受的首字母缩写词,也只应该在必须的时候才使用)
3.2.3 避免使用语言特有的名宗喎?https://www.2cto.com/kf/yidong/wp/" target="_blank" class="keylink">wpc9ond48cd7oqshlylexo7/yvnze3lm7s+s31sd708o/59pv0dtqrdf3o6yx3mpi1nqx6sq2t/vw0mq508pt79huznjt0lxewodqzcp7ysfw2nkqtcshozwvcd48cd48c3ryb25nptkqupja4ndnw/vkudpd0+/s5cnp09ds4tlltctd+9fwo6y2+lk70qrkudpd0+/r1mzy09c1xlnyvpzx1qgjpc9zdhjvbmc+pc9wpjxwpjxzdhjvbmc+0qrkudpdq0xstctnqnpdwodqzcp7o6y2+lk70qrkudpd0+/r1mzy09c1xlhww/stls0tyoe5+7p9wcva4ndn1q7n4qosserktrf7w7vt0mbky/u1xnpv0uwhozwvc3ryb25npjwvcd48cd48c3ryb25nptkqyrntw7ojvpu1xmp719ajrlhiyod2ywx1zbvyaxrlbaostviyu9kq1ti4tmdg0m21xmp719ytls0tyoe5+7p9wcva4ndn1q7n4qosserktrf7w7vt0mbky/u1xnpv0uwjrlb4x9kyzsr9tcta4ndnsrvw2nkqoam8l3n0cm9uzz48l3a+pgg0pjmumi40im6q0tht0efqsbxe0mkw5rg+w/zd+zwvadq+pha+sb692tb30qrd6mr2wcu1sdpd0mla4ndnus3qwrpj1lg908zmu/liobt60tht0lxewodqzbvys8nuscqxo6zi57rozqrl/mph0ahu8cp719ahozwvcd48cd48c3ryb25nptkq1nq0tl2o0tht0efqsbxe0mkw5rg+yrhkudpd0+u+yufqsc/gy8a1xmp719ajrnxi09da+9pazbuz9kfqsdauvos1xlnyz7whozwvc3ryb25npjwvcd48cd4gwp3i56o6y2xhc3mgqxbwrg9tbwfpbnt9pc9wpjxwpknsyxnziefwcervbw1haw5tzxr1cht9pc9wpjxwpjxzdhjvbmc+0qrtxc/iyrntw7rz17q2+lk7ysfhsne6wlsx7cq+0tht0efqsbxe0mkw5rg+oam8l3n0cm9uzz48l3a+pha+phn0cm9uzz6/vmlhyrntw8ir0mk1q9pq0uls5bxeserktrf7o6y2+lk7yse88rwltcs4+nlr09cx6sq2t/vm7bztuvpxurvyx7dxuqgjpc9zdhjvbmc+pc9wpjxwpjxzdhjvbmc+0qrkudpdyv3x1rrz17ratlhtyr7s0dpqqvbjtctqwrdmsb6hqsjnufvs0dpqqvbjtctd+9fwyrhoqnk709ds4tlltctd+9fwo6yyu9llzo2807rz17qhozwvc3ryb25npjwvcd48cd7a/cjno7pwdwjsawnjbgfzcybynta5q2vydglmawnhdgv7ftwvcd48cd4guhvibgljignsyxnzifg1mdldzxj0awzpy2f0ztj7ftwvcd48cd48c3ryb25nprk70qru2rhqyra3+9bqyrntw6gwrxihsbrz17ratmf4t9bp4m2sqvbjtcsyu82ssoaxvqgjpc9zdhjvbmc+pc9wpjxwpsd9yoejunb1ymxpy2nsyxnzienhcnt9pc9wpjxwpibqdwjsawmgy2xhc3mgq2fyrxh7fsavl7ttzvo1xmq+wp08l3a+pggzpjmumyczzndyvk+6zurmtlxew/zd+zwvadm+pha+s8zq8ryvysfsu7j2sr/k8lwl1kqjrm2syrg7ubt6se3n0lnctprc67pm0pk1xmntt92ho9k7sopatmu10ru49rpm0pk8r7320+vsu7j2rexmz+c21nomoaoxvr3a1vfsqr2yrexmw/zd+9s8tqijrlpm0pk8r7xew/zd+9s8tqjt67tlwodlxqgjpc9wpjxwptkqvmfxoaosw/vx1r/vvott60rmtlrns8zq8ryvyseyu82stcs4xctuoapd+9fwv9w85lbuv6q3osjl1lhatmu1ysfsu9fpwt+8rcq1zowjrlb4rexmus2zzndyvk/u8srh1nq08rd8us2yv8rwyrg1xnk7upa1pdsqoam8l3a+pha+phn0cm9uzz7sqs6qs8zq8ryvus1etezrodtxzohkvtdutctd+9fwo6ja/cjno7ptexn0zw0urgf0yaop1elr+brcyn3s177n1qq1wmv8tcs089bcuabe3kgjs8zq8ryvus1etey1xmp719ayu9k7tqjsqrrnw/vx1r/vvotp4lbu06ajrlwr1nqzzndyvk/d/mp7yrhx8dgtw/vx1r/vvos1xmp719bsssrhus/h6brpwo21xkgjpc9zdhjvbmc+pc9wpjxwpjxzdhjvbmc+v7zcx7c01dxi58/ctcteo8q9uphetezd/mp7o7o8l3n0cm9uzz48l3a+pha+phn0cm9uzz48q29tcgfuet4upenvbxbvbmvudd4uzgxspc9zdhjvbmc+pc9wpjxwpjxzdhjvbmc+xutw0dxdb21wb25lbnq+spy6rnk7upa78rbgupbs1lxjusw31rj0tctx1r7ko6zi56o6pc9zdhjvbmc+pc9wpjxwpjxzdhjvbmc+twljcm9zb2z0llzpc3vhbejhc2ljlmrsbdwvc3ryb25npjwvcd48cd48c3ryb25npk1py3jvc29mdc5waxn1ywxcyxnpyy5wc2euzgxspc9zdhjvbmc+pc9wpjxomz4zljqgw/vx1r/vvos1xmp8w/s8l2gzpjxwpsp8w/u/1bzktctev7hqysfh5c76o6y3vbhjv/k83lxeyrntw9xfoapsu7djtctd+9fwv9w85mp8w/u55ttyyofpwqo6pc9wpjxwpjxzdhjvbmc+penvbxbhbnk+lig8uhjvzhvjdd4=")[.][.]
示例如下:
microsoft.visualstudio
microsoft.visualstudio.design
litware.security
l 要用公司名称作为名字空间的前缀,这样就可以避免与另一家公司使用相同的名字。
l 要用稳定的、与版本无关的产品名称作为名字空间的第二层。
l 不要根据公司的组织架构来决定名字空间的层次结构,因为公司内部组织的名称一般来说不会持续太长的时间。
l 要使用pascalcasing大小写风格,并用点号来分隔名字空间中的各部分(例如:microsoft.office.powerpoint).如果商标使用了非传统的大小写风格,那么即使该风格与常规大小写风格相背,也还是应该遵循商标的大小写风格。
l 考虑在适当的时候在名字空间中使用负数形式。
例如:要用system.collections而不要用system.collection。商标和首字母缩写词除外。
l 不要用相同的名字来命名名字空间与位于该名字空间中的类型。
例如:不要将名字空间命名为debug,然后又在该名字空间中提供一个名为debug的类。
名字空间与类型名的冲突
名字空间用来把类型组织成一个逻辑的、易于浏览的层次结构。对解决在导入多个名字空间时可能引起的类型名的二义性,它们是不可或缺的。
不要引入太一般化的类型名(例如:element,node,log,message)
这样的名字很容易引起类型冲突,名字空间可以分为下面的类别:
l 应用程序模型名字空间(application model namespace)
l 基础设施名字空间(infrastructure namespace)
l 核心名字空间(core namespace)
l 技术名字空间组(technology namespace group)
1.应用程序模型名字空间
不要给位于同一个应用程序模型的名字空间中的类型起相同的名字。
2.基础设施名字空间
这个类别包含了一些再开发常用的应用程序时很少会导入的名字空间。
3.核心名字空间
核心名字空间包含了所有的system名字空间,但应用程序模型名字空间和基础设置名字空间除外。(核心名字空间包括system、system.io、system.xml、system.net等)
不要给类型会与核心名字空间中的任何类型产生冲突的名字。(例如:不要用stream来作为类型名,它会和system.io.stream产生冲突)
4.技术名字空间组
这个类别包括所有那些以相同的两个前缀(.*)开始的名字空间(例如:microsoft.build.utilities和microsoft.build.tasks属于同一个技术类型,但是彼此之间不冲突)
不要给类型会与位于同一技术组中的其他类型产生冲突的名字。
不要在技术名字空间和应用程序模型名字空间的类型之间引入类型名冲突(例如:不应给microsoft.visualbasic名字空间增加一个binding类型,因为system.windows.forms名字空间已包含该类型名)
3.5 类、结构和接口的命名
一般来讲,类型名应该是名词词组,因为他们代表了系统中的实体,如果无法为类型找到一个名词词组,那么可能应该重新考虑该类型的总体设计。
最易识别的名字应该用于最常用的类型,最常用的类型名应该反映出使用场景,而不是继承层次。大多数用户只是用继承层次的叶节点,而不关心类层次结构。
下面的命名规范适用于一般的类型命名。
要用名词或者名词词组来给类型命名,在极少数情况下也可以用形容词词组来给类型命名。(命名时用pascalcasing大小写风格,这使类型名和方法区分开,后者用动词词组来命名。)
不要给类名加前缀。(唯一的前缀是用于接口“i”)
考虑让派生类的名字以基类的名字结尾。(例如:publicclass filestream:stream{…})
要让接口的名字以字母i开头,这样可以显示出该类型是一个接口。(例如:icomponent)
要确保一对类/接口的名字只差一个“i”前缀,如果该类是该接口的标准实现。
例如: public interface icomponent{…}
public class component :icomponent{…}
3.5.1 泛型类型参数的命名
泛型是.net框架2.0一个主要特征,它引入了一种称为“类型参数(type parameter)”的新标识符。以下的规范描述了与类型参数有关的命名约定。
要用描述性的名字来命名泛型类型参数,除非一个字母就够了,而且描述性的名字并不能增添什么价值。
例如:public interface tsessionchannel{…}
public class list{…}
考虑用t来命名参数类型——如果类型只有一个类型参数,且类型参数只有一个字母。
例如:public int icomparer{…}
public delegate boolpredicate(t item);
要给描述性的类型参数名加上t前缀。
例如:public interface isessionchannel wheretsession:isession
{
tsession session{get;}
}
考虑在类型参数名中显示出施加于该类型参数上的限制。
3.5.2 常用类型的命名
如果要从.net框架所包含的类型派生新类型,或者要实现.net框架中的类型,要遵循下表的一个命名规则。如下所示:
编程语言特有的关键字。
要在命名资源时仅使用字母、数字和下划线。
要用点号来给标识符清楚的划分层次。
例如:设计菜单系统资源,命名方式如下:
menus.filemenu.close.text
menus.filemenu.close.color
要在为异常的消息资源命名时遵循下面的命名约定:
资源标识符应该是异常的类型名加上一个简短的异常标识符,之间以点号分隔:
argumentexception.illegalcharacters
argumentexception.invalidname
喎?https:> 示例如下:
microsoft.visualstudio
microsoft.visualstudio.design
litware.security
l 要用公司名称作为名字空间的前缀,这样就可以避免与另一家公司使用相同的名字。
l 要用稳定的、与版本无关的产品名称作为名字空间的第二层。
l 不要根据公司的组织架构来决定名字空间的层次结构,因为公司内部组织的名称一般来说不会持续太长的时间。
l 要使用pascalcasing大小写风格,并用点号来分隔名字空间中的各部分(例如:microsoft.office.powerpoint).如果商标使用了非传统的大小写风格,那么即使该风格与常规大小写风格相背,也还是应该遵循商标的大小写风格。
l 考虑在适当的时候在名字空间中使用负数形式。
例如:要用system.collections而不要用system.collection。商标和首字母缩写词除外。
l 不要用相同的名字来命名名字空间与位于该名字空间中的类型。
例如:不要将名字空间命名为debug,然后又在该名字空间中提供一个名为debug的类。
名字空间与类型名的冲突
名字空间用来把类型组织成一个逻辑的、易于浏览的层次结构。对解决在导入多个名字空间时可能引起的类型名的二义性,它们是不可或缺的。
不要引入太一般化的类型名(例如:element,node,log,message)
这样的名字很容易引起类型冲突,名字空间可以分为下面的类别:
l 应用程序模型名字空间(application model namespace)
l 基础设施名字空间(infrastructure namespace)
l 核心名字空间(core namespace)
l 技术名字空间组(technology namespace group)
1.应用程序模型名字空间
不要给位于同一个应用程序模型的名字空间中的类型起相同的名字。
2.基础设施名字空间
这个类别包含了一些再开发常用的应用程序时很少会导入的名字空间。
3.核心名字空间
核心名字空间包含了所有的system名字空间,但应用程序模型名字空间和基础设置名字空间除外。(核心名字空间包括system、system.io、system.xml、system.net等)
不要给类型会与核心名字空间中的任何类型产生冲突的名字。(例如:不要用stream来作为类型名,它会和system.io.stream产生冲突)
4.技术名字空间组
这个类别包括所有那些以相同的两个前缀( 不要给类型会与位于同一技术组中的其他类型产生冲突的名字。 不要在技术名字空间和应用程序模型名字空间的类型之间引入类型名冲突(例如:不应给microsoft.visualbasic名字空间增加一个binding类型,因为system.windows.forms名字空间已包含该类型名) 一般来讲,类型名应该是名词词组,因为他们代表了系统中的实体,如果无法为类型找到一个名词词组,那么可能应该重新考虑该类型的总体设计。 最易识别的名字应该用于最常用的类型,最常用的类型名应该反映出使用场景,而不是继承层次。大多数用户只是用继承层次的叶节点,而不关心类层次结构。 下面的命名规范适用于一般的类型命名。 要用名词或者名词词组来给类型命名,在极少数情况下也可以用形容词词组来给类型命名。(命名时用pascalcasing大小写风格,这使类型名和方法区分开,后者用动词词组来命名。) 不要给类名加前缀。(唯一的前缀是用于接口“i”) 考虑让派生类的名字以基类的名字结尾。(例如:publicclass filestream:stream{…}) 要让接口的名字以字母i开头,这样可以显示出该类型是一个接口。(例如:icomponent) 要确保一对类/接口的名字只差一个“i”前缀,如果该类是该接口的标准实现。 例如: public interface icomponent{…} public class component :icomponent{…} 泛型是.net框架2.0一个主要特征,它引入了一种称为“类型参数(type parameter)”的新标识符。以下的规范描述了与类型参数有关的命名约定。 要用描述性的名字来命名泛型类型参数,除非一个字母就够了,而且描述性的名字并不能增添什么价值。 例如:public interface tsessionchannel public class list 考虑用t来命名参数类型——如果类型只有一个类型参数,且类型参数只有一个字母。 例如:public int icomparer public delegate boolpredicate 要给描述性的类型参数名加上t前缀。 例如:public interface isessionchannel { tsession session{get;} } 考虑在类型参数名中显示出施加于该类型参数上的限制。 如果要从.net框架所包含的类型派生新类型,或者要实现.net框架中的类型,要遵循下表的一个命名规则。如下所示: 编程语言特有的关键字。 要在命名资源时仅使用字母、数字和下划线。 要用点号来给标识符清楚的划分层次。 例如:设计菜单系统资源,命名方式如下: menus.filemenu.close.text menus.filemenu.close.color 要在为异常的消息资源命名时遵循下面的命名约定: 资源标识符应该是异常的类型名加上一个简短的异常标识符,之间以点号分隔: argumentexception.illegalcharacters argumentexception.invalidname
3.5 类、结构和接口的命名
3.5.1 泛型类型参数的命名
3.5.2 常用类型的命名
上一篇: 一些android开发实用性网站记录
下一篇: 运行在容器中的Oracle XE-11g