第一篇:Java命名規(guī)范
Java是一種區(qū)分字母的大小寫(xiě)(case-sensitive)的語(yǔ)言,下面談?wù)凧ava語(yǔ)言中包、類(lèi)、變量等的命名規(guī)范。
(一)Package(包)的命名:
Package的名字應(yīng)該都是由一個(gè)小寫(xiě)單詞組成,例如net.ebseries.modules。
(二)Class(類(lèi))的命名:
Class的名字首字母大寫(xiě),通常由多個(gè)單詞合成一個(gè)類(lèi)名,要求每個(gè)單詞的首字母也要大寫(xiě),例如:DataFile或InfoParser。
(三)變量的命名:
變量的名字可大小寫(xiě)混用,但首字符應(yīng)小寫(xiě)。詞由大寫(xiě)字母分隔,限制用下劃線,限制使用美元符($),因?yàn)檫@個(gè)字符對(duì)內(nèi)部類(lèi)有特殊的含義。如:inputFileSize。
(四)Interface(接口)的命名:與Class的命名類(lèi)似。
(五)Static Final 變量(相當(dāng)于常量)的命名
Static Final 變量的名字應(yīng)該都大寫(xiě),并且指出完整含義,例如:final MAXUPLOADFILESIZE=1024。
(六)方法的命名
方法名的第一個(gè)單詞應(yīng)該是動(dòng)詞,大小寫(xiě)可混用,但首字母應(yīng)小寫(xiě)。在每個(gè)方法名內(nèi),大寫(xiě)字母將詞分隔并限制使用下劃線。參數(shù)的名字必須和變量的命名規(guī)范一致。使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:
setCounter(int size){this.size = size;}
數(shù)組的命名
數(shù)組應(yīng)該總是用下面的方式來(lái)命名:byte[] buffer;而不是:byte buffer[](習(xí)慣性問(wèn)題而已)。
值得注意的是,命名時(shí)應(yīng)盡量采用完整的英文描述符(也有特例)。此外,一般應(yīng)采用小寫(xiě)字母,但類(lèi)名、接口名以及任何非初始單詞的第一個(gè)字母要大寫(xiě)。
歸納成以下幾點(diǎn),就是:盡量使用完整的英文描述符、采用適用于相關(guān)領(lǐng)域的術(shù)語(yǔ)、采用大小寫(xiě)混合使名字可讀、盡量少用縮寫(xiě),但如果用了,要明智地使用,且在整個(gè)工程中統(tǒng)一、避免使用長(zhǎng)的名字(小于 15 個(gè)字母是個(gè)好主意)、避免使用類(lèi)似的名字,或者僅僅是大小寫(xiě)不同的名字、避免使用下劃線(除靜態(tài)常量等)。
第二篇:Java命名規(guī)范
Java包的名字都是由小寫(xiě)單詞組成。但是由于Java面向?qū)ο缶幊痰奶匦?,每一名Java程序員都可以編寫(xiě)屬于自己的Java包,為了保障每個(gè)Java包命名的唯一性,在最新的Java編程規(guī)范中,要求程序員在自己定義的包的名稱(chēng)之前加上唯一的前綴。由于互聯(lián)網(wǎng)上的域名稱(chēng)是不會(huì)重復(fù)的,所以程序員一般采用自己在互聯(lián)網(wǎng)上的域名稱(chēng)作為自己程序包的唯一前綴。例如: net.frontfree.javagroup
類(lèi)的名字必須由大寫(xiě)字母開(kāi)頭而單詞中的其他字母均為小寫(xiě);如果類(lèi)名稱(chēng)由多個(gè)單詞組成,則每個(gè)單詞的首字母均應(yīng)為大寫(xiě)例如TestPage;如果類(lèi)名稱(chēng)中包含單詞縮寫(xiě),則這個(gè)所寫(xiě)詞的每個(gè)字母均應(yīng)大寫(xiě),如:XMLExample,還有一點(diǎn)命名技巧就是由于類(lèi)是設(shè)計(jì)用來(lái)代表對(duì)象的,所以在命名類(lèi)時(shí)應(yīng)盡量選擇名詞。
例如: Circle
interface RasterDelegate;
interface Storing;
方法的名字的第一個(gè)單詞應(yīng)以小寫(xiě)字母作為開(kāi)頭,后面的單詞則用大寫(xiě)字母開(kāi)頭。例如: sendMessge
變量(Variables)除了變量名外,所有實(shí)例,包括類(lèi),類(lèi)常量,均采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。變量名不應(yīng)以下劃線或美元符號(hào)開(kāi)頭,盡管這在語(yǔ)法上是允許的。
變量名應(yīng)簡(jiǎn)短且富于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出其用途。盡量避免單個(gè)字符的變量名,除非是一次性的臨時(shí)變量。臨時(shí)變量通常被取名為i,j,k,m和n,它們一般用于整型;c,d,e,它們一般用于字符型。char c;
int i;
float myWidth;
實(shí)例變量(Instance Variables)大小寫(xiě)規(guī)則和變量名相似,除了前面需要一個(gè)下劃線 int _employeeId;
String _name;
Customer _customer;
常量的名字應(yīng)該都使用大寫(xiě)字母,并且指出該常量完整含義。如果一個(gè)常量名稱(chēng)由多個(gè)單詞組成,則應(yīng)該用下劃線來(lái)分割這些單詞。
例如: MAX_VALUE
第三篇:資源上傳命名規(guī)范
資源上傳命名規(guī)范
【導(dǎo)語(yǔ)】
為了提高資源可讀性,讓您更加方便查閱資料,網(wǎng)站制定了《第二教育網(wǎng)資源命名規(guī)范》文檔,所有上傳的資料必須符合文檔中要求。具體如下:
【高中上傳資源命名規(guī)范】
一.標(biāo)題命名規(guī)則:
1、備課資源命名規(guī)則:(教案,學(xué)案,課件,單元測(cè)試)
年級(jí)+科目+空格(半角)+資源標(biāo)題+類(lèi)別+空格+版本+必選修
例:
高中語(yǔ)文 第六單元《短歌行》教案 新人教版必修2 高中英語(yǔ) Unit4 Warming Up and Reading課件 新人教版必修1
2、對(duì)于試題命名規(guī)則:省份+市+學(xué)校+年份+年級(jí)+科目+類(lèi)別+版本
例:
江蘇省淮州中學(xué)09-10學(xué)年高二地理下學(xué)期期末考試新人教版
無(wú)答案(缺答案改成無(wú)答案),掃描版,PDF版,圖片版 例:
江蘇省淮州中學(xué)09-10學(xué)年高二地理下學(xué)期期末考試(掃描版)新人教版
江蘇省淮州中學(xué)09-10學(xué)年高二地理下學(xué)期期末考試(圖片版)新人教版
江蘇省淮州中學(xué)09-10學(xué)年高二地理下學(xué)期期末考試(PDF版)新人教版
江蘇省淮州中學(xué)09-10學(xué)年高二地理下學(xué)期期末考試(無(wú)答案)新人教版
3、對(duì)于套題命名規(guī)則:必須格式相同(包括符號(hào)和空格)
例:
2011年高考語(yǔ)文系統(tǒng)集成一輪復(fù)習(xí)方案 第一編語(yǔ)言知識(shí)及運(yùn)用 新人教版 2011年高考語(yǔ)文系統(tǒng)集成一輪復(fù)習(xí)方案 第二編文言文閱讀 新人教版
2011年高考語(yǔ)文系統(tǒng)集成一輪復(fù)習(xí)方案 第三編文學(xué)常識(shí)、名著閱讀和名句名篇 新人教版 2011年高考語(yǔ)文系統(tǒng)集成一輪復(fù)習(xí)方案 第四編古代詩(shī)歌鑒賞 新人教版 2011年高考語(yǔ)文系統(tǒng)集成一輪復(fù)習(xí)方案 第五編現(xiàn)代文閱讀 新人教版
二.特殊命名規(guī)則:
注意:標(biāo)題里除書(shū)名號(hào)和特別標(biāo)題符號(hào)需要除外,其它符號(hào)(如:冒號(hào),中間橫線,間隔號(hào),一律用空格代替。對(duì)于特殊格式文件名命名規(guī)則:
年級(jí)+科目+空格(半角)+資源標(biāo)題+類(lèi)別+空格+(特殊文件格式)+空格+版本+必選修
例:
高中英語(yǔ) unit 4 Listening素材(mp3)新人教版必修4 高中英語(yǔ) unit 4 Listening視頻課件(avi)新人教版必修4 注:凡是swf 格式的文件,統(tǒng)一用命名:(flash)
對(duì)于網(wǎng)站上的視頻素材,統(tǒng)一命名年級(jí)+科目+標(biāo)題+視頻+ 類(lèi)別+視頻格式+版本+必選修 例:高中政治 經(jīng)濟(jì)全球化視頻素材(avi)新人教版必修1 三.命名專(zhuān)業(yè)性
1,高一,高二,高三和必選修,不能并形存在
例:該試題原文件名是:高一語(yǔ)文 第六單元《短歌行》教案 新人教版必修2 則命名規(guī)則:高中語(yǔ)文
第六單元《短歌行》教案 新人教版必修2 實(shí)現(xiàn):文件名為高中,上傳后臺(tái)傳到相對(duì)應(yīng)所屬的,高一年級(jí)里
2,綜合網(wǎng)站各科分類(lèi),正確判斷資源版本和必選修的準(zhǔn)確性
3,根據(jù)資源標(biāo)題及內(nèi)容,正確判斷資源所屬科目的準(zhǔn)確性 4, 根據(jù)原件名稱(chēng)去修改文件名,不能隨意改動(dòng)文件名的標(biāo)題
【初中、小學(xué)上傳資源命名規(guī)范】
一.標(biāo)題命名規(guī)則:
初中:所有“新版”資源需要再標(biāo)題上標(biāo)注為(新版)+版本
小學(xué):所有“新版”資源需要再標(biāo)題上標(biāo)注為(新版)+版本
1、備課資源的命名規(guī)則如下(注:備課包括課件 教案 學(xué)案 素材)
1)年級(jí)+科目+上下冊(cè)+空格(半角)+資源標(biāo)題+類(lèi)別+空格+版本
例:三年級(jí)語(yǔ)文上冊(cè) 第10課《寫(xiě)給云》課件 西師大版
二年級(jí)數(shù)學(xué)上冊(cè) 課間活動(dòng)教案 北師大版 七年級(jí)數(shù)學(xué)上冊(cè) 1.4絕對(duì)值教案 浙教版
七年級(jí)語(yǔ)文下冊(cè) 第一單元導(dǎo)學(xué)案 人教新課標(biāo)版
八年級(jí)物理上冊(cè) 4.4 光的折射教學(xué)課件(新版)新人教版
2)省份+年份+年級(jí)+科目+上下冊(cè)+資源標(biāo)題+類(lèi)別+版本
例:江蘇省灌南縣2012年秋七年級(jí)語(yǔ)文上冊(cè)《偉人細(xì)胞》教案 蘇教版
3)省份+年份+年級(jí)+科目+上下冊(cè)+資源標(biāo)題+主題+類(lèi)別+版本
例:湖北省鐘祥市石牌鎮(zhèn)七年級(jí)數(shù)學(xué)上冊(cè)《整式的加減》復(fù)習(xí)課件 新人教版
安徽省亳州市風(fēng)華中學(xué)七年級(jí)語(yǔ)文上冊(cè)《第4課 金色花》課件3(新版)新人教版
2、試題資源的命名規(guī)則如下(注:試題包括期中 期末 月考 練習(xí)單元測(cè)試 復(fù)習(xí)等)
1)省份+年份+年級(jí)+科目+上下學(xué)期(第一學(xué)期)+類(lèi)別+版本
例:浙江省湖州市吳興區(qū)2013年一年級(jí)語(yǔ)文上學(xué)期期末考試試卷
江蘇省太倉(cāng)市2012-2013學(xué)年七年級(jí)英語(yǔ)第一學(xué)期期末考試試題 人教新目標(biāo)版 吉林省鎮(zhèn)賚縣鎮(zhèn)2013屆九年級(jí)語(yǔ)文第四次月考試題(掃描版)新人教版 山東省青州市2013年三年級(jí)語(yǔ)文下學(xué)期期末質(zhì)量檢測(cè)試題(無(wú)答案)
吉林省鎮(zhèn)賚縣鎮(zhèn)2013-2014九年級(jí)語(yǔ)文第四次月考試題(新版)新人教版 注:年份之間的橫線一定要是這個(gè)狀態(tài)的“-”
上學(xué)期(下學(xué)期)與第一學(xué)期(第二學(xué)期)不可以并存。
“期中考試試題”不可以并存,應(yīng)該為“期中試題”
“缺答案”要改為“無(wú)答案”
掃描版的試題標(biāo)題要為“掃描版,無(wú)答案” 而不應(yīng)該是“無(wú)答案,掃描版”。
2)初中例如有單元、章節(jié)、知識(shí)點(diǎn)的要改為上冊(cè)而不是上學(xué)期。下冊(cè)與下學(xué)期同理。
例:廣東省江門(mén)市七年級(jí)生物上學(xué)期第三單元綜合檢測(cè)題(無(wú)答案)正確應(yīng)為:廣東省江門(mén)市七年級(jí)生物上冊(cè) 第三單元綜合檢測(cè)題(無(wú)答案)
3、中考套題的命名規(guī)則如下(注:必須格式相同 包括符號(hào)和空格 中考與九年級(jí)不可以并存)
1)年份+年級(jí)+科目(+復(fù)習(xí)或總復(fù)習(xí))+資源標(biāo)題+類(lèi)別+版本
例:
【南方新中考】2013年中考生物復(fù)習(xí)人的生活需要空氣課件 新人教版
【南方新中考】2013年中考生物復(fù)習(xí)生物的生殖和發(fā)育課件 新人教版
【南方新中考】2013年中考生物復(fù)習(xí)被子植物的一生課件 新人教版
【南方新中考】2013年中考生物復(fù)習(xí)專(zhuān)題四 突破中考社會(huì)熱點(diǎn)題型課件 新人教版
【備考2014 志鴻優(yōu)化設(shè)計(jì)】2013版中考化學(xué)總復(fù)習(xí)基礎(chǔ)講練 第五單元 化學(xué)方程式 新人教版(中學(xué)教材全解)2013-2014學(xué)年九年級(jí)化學(xué)全冊(cè) 第8章 食品中的有機(jī)化合物綜合檢測(cè)題 滬教版
注:“【】”此符號(hào)的使用規(guī)則為,必須是參考用書(shū)或者是教材類(lèi)的資源,其余的比較突出的重點(diǎn)需使用“()”
來(lái)顯示。
2)省份+年份+年級(jí)+科目(+復(fù)習(xí)或總復(fù)習(xí))+主題+資源標(biāo)題+版本
例:
廣東省2013年中考政治復(fù)習(xí)專(zhuān)題檢測(cè)試題 過(guò)富有情趣的生活
廣東省2013年中考政治復(fù)習(xí)專(zhuān)題檢測(cè)試題 交往藝術(shù)新思維
廣東省2013年中考政治復(fù)習(xí)專(zhuān)題檢測(cè)試題 滿(mǎn)懷希望迎接明天
廣東省2013年中考政治復(fù)習(xí)專(zhuān)題檢測(cè)試題 我們的文化
特例:
2012年中考政治一輪復(fù)習(xí)八上 7.1禮貌待人精品課件 新人教版
2012年中考政治一輪復(fù)習(xí)七上 1笑迎生活認(rèn)識(shí)自我精品課件 新人教版
2012年中考政治一輪復(fù)習(xí)九年級(jí) 16關(guān)注經(jīng)濟(jì)發(fā)展精品課件 新人教版 3)小升初的命名規(guī)則
例:2014小升初語(yǔ)文知識(shí)點(diǎn)專(zhuān)項(xiàng)復(fù)習(xí)專(zhuān)題一 基礎(chǔ)知識(shí) a o e 教案
湖北省小升初英語(yǔ) 閱讀理解基礎(chǔ)訓(xùn)練10 北京市小升初語(yǔ)文模擬測(cè)試題
(四)4、特殊格式文件名命名規(guī)則如下
1)年級(jí)+科目+上下冊(cè)+空格(半角)+資源標(biāo)題+類(lèi)別+(特殊文件格式)+空格+版本
例:五年級(jí)英語(yǔ)上冊(cè) lesson1課文朗讀素材(MP3)新路徑(一起)
九年級(jí)化學(xué)上冊(cè) co2制作及性質(zhì)素材(flash)新人教版
七年級(jí)語(yǔ)文上冊(cè)《15 錢(qián)塘湖春行》視頻素材(f4v)(新版)新人教版
2)省份+年級(jí)+科目+上下冊(cè)+空格(半角)+資源標(biāo)題+類(lèi)別+(特殊文件格式)+空格+版本
例:重慶市綦江區(qū)三江中學(xué)八年級(jí)語(yǔ)文上冊(cè) 了解蓮視頻素材(mpg)
注:
1、凡是swf 格式的文件,統(tǒng)一用命名(flash)其它類(lèi)型可以根據(jù)其文件的屬性來(lái)定。
2、標(biāo)題里除書(shū)名號(hào)和特別標(biāo)題符號(hào)需要除外,其它符號(hào)(如:冒號(hào),中間橫線,間隔號(hào),用空格代替,也有特例,需要自己判斷,下面是例子。
特例:
3、標(biāo)題里外不符,要以里面的為準(zhǔn)進(jìn)行命題,同時(shí)如果標(biāo)題上沒(méi)有知識(shí)點(diǎn)而里面有知識(shí)點(diǎn)的,要將其復(fù)制到標(biāo)題上。
5、打包文件名命名規(guī)則如下
1)省份+年份+年級(jí)+科目+上下冊(cè)+資源標(biāo)題+類(lèi)別+(打包套)+版本
例:湖南省岳陽(yáng)市七年級(jí)英語(yǔ)上冊(cè) Unit 6 Do you like bananas教案(打包5套)人教新目標(biāo)版
寧夏外國(guó)語(yǔ)學(xué)校小升初英語(yǔ)專(zhuān)項(xiàng)訓(xùn)練 完形填空(打包50套)
2)省份+年份+年級(jí)+科目+上下冊(cè)+資源標(biāo)題+類(lèi)別(注:多種)+(打包套)+版本
例:八年級(jí)地理上冊(cè) 《第一章 第四節(jié) 中國(guó)的民族》課件+學(xué)案+同步練習(xí)(打包3套)湘教版
注:多種類(lèi)別的打包要將知識(shí)點(diǎn)加上書(shū)名號(hào)
二.命名專(zhuān)業(yè)性
1、綜合網(wǎng)站各科分類(lèi),正確判斷資源版本和上下冊(cè)的準(zhǔn)確性
2、根據(jù)資源標(biāo)題及內(nèi)容,正確判斷資源所屬科目的準(zhǔn)確性
3、根據(jù)原件名稱(chēng)去修改文件名,不能隨意改動(dòng)文件名的標(biāo)題
4、以上文件根據(jù)實(shí)際情況進(jìn)行隨時(shí)添加修改。
第四篇:oracle命名規(guī)范
1、編寫(xiě)目的
使用統(tǒng)一的命名和編碼規(guī)范,使數(shù)據(jù)庫(kù)命名及編碼風(fēng)格標(biāo)準(zhǔn)化,以便于閱讀、理解和繼承。
2、適用范圍
本規(guī)范適用于公司范圍內(nèi)所有以O(shè)RACLE作為后臺(tái)數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)和項(xiàng)目開(kāi)發(fā)工作。
3、對(duì)象命名規(guī)范 3.1 數(shù)據(jù)庫(kù)和SID 數(shù)據(jù)庫(kù)名定義為系統(tǒng)名+模塊名
?
全局?jǐn)?shù)據(jù)庫(kù)名和例程SID名要求一致
?
因SID名只能包含字符和數(shù)字,所以全局?jǐn)?shù)據(jù)庫(kù)名和SID名中不能含有“_”等字符
3.2 表相關(guān) 3.2.1 表空間
?
面向用戶(hù)的專(zhuān)用數(shù)據(jù)表空間以用戶(hù)名+_+data命名,如Aud用戶(hù)專(zhuān)用數(shù)據(jù)表空間可命名為Aud_data ?
面向用戶(hù)的專(zhuān)用索引表空間以用戶(hù)名+_+idx命名 ?
面向用戶(hù)的專(zhuān)用臨時(shí)表空間以用戶(hù)名+_+tmp命名 ?
面向用戶(hù)的專(zhuān)用回滾段表空間以用戶(hù)名+_+rbs命名
?
面向應(yīng)用的表空間以應(yīng)用名+_data/應(yīng)用名+_idx/應(yīng)用名+_tmp/應(yīng)用名+_rbs命名 ?
LOB段數(shù)據(jù)專(zhuān)用表空間以其數(shù)據(jù)表空間+_+lobs命名,如上例中數(shù)據(jù)表空間為Aud_data,則LOB段表空間可命名為Aud_data_lobs 3.2.2 表空間文件
表空間文件命名以表空間名+兩位數(shù)序號(hào)(序號(hào)從01開(kāi)始)組成,如Aud_data01等 3.2.3 表
表命名要遵循以下原則:
?
一般表采用“系統(tǒng)名+t_+模塊名+_+表義名” 格式構(gòu)成
?
若數(shù)據(jù)庫(kù)中只含有單個(gè)模塊,命名可采用“系統(tǒng)名+t_+表義名”格式構(gòu)成
?
模塊名或表義名均以其漢語(yǔ)拼音的首字符命名,表義名中漢語(yǔ)拼音均采用小寫(xiě),且字符間不加分割符;
?
表別名命名規(guī)則:取表義名的前3個(gè)字符加最后一個(gè)字符。如果存在沖突,適當(dāng)增加字符(如取表義名的前4個(gè)字符加最后一個(gè)字符等)?
臨時(shí)表采用“系統(tǒng)名+t_tmp_+表義名” 格式構(gòu)成 ?
表的命名如
dft_gy_cbap:系統(tǒng)名(電費(fèi) df)+t_+模塊名(高壓 gy)+_+表義名(抄表安排 cbap)dft_cbbj: 系統(tǒng)名(電費(fèi) df)+t_+表義名(抄表標(biāo)記 cbbj)
dft_tmp_hj: 系統(tǒng)名(電費(fèi) df)+tmp+表義名(合計(jì)hj)(此處為臨時(shí)表)?
關(guān)聯(lián)表命名為Re_表A_表B,Re是Relative的縮寫(xiě),表A和表B均采用其表義名或縮寫(xiě)形式。
3.2.4 屬性(列或字段)屬性命名遵循以下原則:
?
采用有意義的列名,為實(shí)際含義的漢語(yǔ)拼音的首字符,且字符間不加任何分割符
?
屬性名前不要加表名等作為前綴 ?
屬性后不加任何類(lèi)型標(biāo)識(shí)作為后綴 ?
不要使用“ID”作為列名 ?
關(guān)聯(lián)字段命名以 “cd+_+關(guān)聯(lián)表的表義名(或縮寫(xiě))+_+字段名”進(jìn)行 3.2.5 主鍵
?
任何表都必須定義主鍵 ?
表主鍵命名為:“pk+_+表名(或縮寫(xiě))+_+主鍵標(biāo)識(shí)” 如“pk_YHXX_IDKH”等 3.2.6 外鍵
表外鍵命名為: “fk+_+表名(或縮寫(xiě))+_主表名(或縮寫(xiě))+_+主鍵標(biāo)識(shí)” 如“fk_YHLX_YHXX_SFZH”等 3.2.7 CHECK約束
CHECK約束命名為: “chk+_+CHECK約束的列名(或縮寫(xiě))” 3.2.8 UNIQUE約束
UNIQUE約束命名為: “unq+_+UNIQUE約束的列名(或縮寫(xiě))” 3.2.9 索引
索引的命名為:“表名(或縮寫(xiě))+_+列名+_idx”。
其中多單詞組成的屬性列列名取前幾個(gè)單詞首字符再加末單詞首字符組成 如yd_kh表khid上的index: yd_kh_khid_idx 3.2.10 觸發(fā)器
?
AFTER型觸發(fā)器
系統(tǒng)名+tr_+<表名>_+ +[_row] ?
BEFORE型觸發(fā)器
系統(tǒng)名+tr_+<表名>_+bef_+[_row] ?
INSTEAD OF型觸發(fā)器
系統(tǒng)名+ti_+<表名>+_++[_row] ?
各種類(lèi)型的觸發(fā)器中 i,u,d分別表示insert、update和delete 行級(jí)觸發(fā)器,后加_row標(biāo)識(shí),語(yǔ)句級(jí)觸發(fā)器不加,如 yddftr_CSH_i_row 3.2.11 簇
簇以簇中要存儲(chǔ)的各個(gè)表(或表別名)及表間加and的組成命名,即表“A+And+表B?”,如存儲(chǔ)GR(工人)和GRJN(工人技能)表的簇命名為GRAndGRJN 3.3 視圖
視圖命名以系統(tǒng)名v_+模塊名作為前綴,其他命名規(guī)則和表的命名類(lèi)似 3.4 序列
序列命名以seq_+含義名組成 3.5 同義詞
同義詞命名與其基礎(chǔ)對(duì)象的名稱(chēng)一致,但要去除其用戶(hù)前綴或含有遠(yuǎn)程數(shù)據(jù)庫(kù)鏈接的后綴 3.6 存儲(chǔ)對(duì)象相關(guān) 3.6.1 存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程命名由“系統(tǒng)名+sp+_+存儲(chǔ)過(guò)程標(biāo)識(shí)(縮寫(xiě))”組成
存儲(chǔ)過(guò)程標(biāo)識(shí)要以實(shí)際含義的漢語(yǔ)拼音的首字符構(gòu)成,并用下劃線分割各個(gè)組成部分。如增加代理商的帳戶(hù)的存儲(chǔ)過(guò)程為“sfsp_ZJDLSZH”。3.6.2 函數(shù)
函數(shù)命名由“系統(tǒng)名+f+_+函數(shù)標(biāo)識(shí)”組成 3.6.3 包
包命名由“系統(tǒng)名+pkg+_+包標(biāo)識(shí)”組成 3.6.4 函數(shù)文本中的變量采用下列格式命名:
?
參數(shù)變量命名采用“i(o或io)+_+名稱(chēng)”形式,前綴i或o表輸入還是輸出參數(shù) ?
過(guò)程變量命名采用“l(fā)+_+名稱(chēng)”形式 ?
全局包變量命名采用“g+_+名稱(chēng)”形式 ?
游標(biāo)變量命名采用“名稱(chēng)+_+cur”形式 ?
常量型變量命名采用“c+_+名稱(chēng)”形式
?
變量名采用小寫(xiě),若屬于詞組形式,用下劃線分隔每個(gè)單詞
?
變量用來(lái)存放表中的列或行數(shù)據(jù)值時(shí),使用%TYPE、%ROWTYPE方式聲明變量,使變量聲明的類(lèi)型與表中的保持同步,隨表的變化而變化 3.7 用戶(hù)及角色
?
用戶(hù)命名由“系統(tǒng)名稱(chēng)+_+user+_+名詞(或縮寫(xiě))或名詞短語(yǔ)(或縮寫(xiě))”組成 ?
角色命名由“系統(tǒng)名稱(chēng)+_+role+_+名詞(或縮寫(xiě))或名詞短語(yǔ)(或縮寫(xiě))”組成 3.8 數(shù)據(jù)庫(kù)鏈接
?
數(shù)據(jù)庫(kù)鏈接命名由“遠(yuǎn)程服務(wù)器名+_+數(shù)據(jù)庫(kù)名+_+link”組成 ?
若遠(yuǎn)程服務(wù)器名和數(shù)據(jù)庫(kù)名一致,上式“_+數(shù)據(jù)庫(kù)名”部分省去 3.9 命名中的其它注意事項(xiàng)
?
命名都不得超過(guò)30個(gè)字符。?
不要在對(duì)象名的字符之間留空格
?
小心保留詞,要保證你的命名沒(méi)有和保留詞、數(shù)據(jù)庫(kù)系統(tǒng)或者常用訪問(wèn)方法沖突
4、編碼規(guī)范 4.1 一般性注釋
4.1.1 注釋盡可能簡(jiǎn)潔、詳細(xì)而全面
4.1.2 創(chuàng)建每一數(shù)據(jù)庫(kù)對(duì)象時(shí)都要加上COMMENT ON注釋?zhuān)哉f(shuō)明該對(duì)象的功能和用途;建表時(shí),對(duì)某些數(shù)據(jù)列也要加上COMMENT ON注釋?zhuān)哉f(shuō)明該列和/或列取值的含義。如:XX表中有CZZT列屬性為NUMBER(10, 0)可加COMMENT ON注釋如下
COMMENT ON COLUMN XX.CZZT IS '0 = 正常, 1 = 等待, 2 = 超時(shí), 3 = 登出' 4.1.3 注釋語(yǔ)法包含兩種情況:?jiǎn)涡凶⑨?、多行注?單行注釋?zhuān)鹤⑨屒坝袃蓚€(gè)連字符(--),一般對(duì)變量、條件子句可以采用該類(lèi)注釋。多行注釋?zhuān)悍?hào)之間的內(nèi)容為注釋內(nèi)容。對(duì)某項(xiàng)完整的操作建議使用該類(lèi)注釋。4.2 函數(shù)文本注釋
4.2.1 在每一個(gè)塊和過(guò)程(存儲(chǔ)過(guò)程、函數(shù)、包、觸發(fā)器、視圖等)的開(kāi)頭放置注釋 CREATE [OR REPLACE] PROCEDURE dfsp_xxx ?
4.2.2 傳入?yún)?shù)的含義應(yīng)該有所說(shuō)明。如果取值范圍確定,也應(yīng)該一并說(shuō)明。取值有特定含義的變量(如boolean類(lèi)型變量),應(yīng)給出每個(gè)值的含義。
4.2.3 在每一個(gè)變量聲明的旁邊添加注釋。說(shuō)明該變量要用作什么 通常,簡(jiǎn)單使用單行注釋就行了,例如
l_sfzh CHAR(11)
--身份證號(hào)碼 4.2.4 在塊的每個(gè)主要部分之前添加注釋 在塊的每個(gè)主要部分之前增加注釋?zhuān)忉屜隆M語(yǔ)句目的,最好是說(shuō)明該段語(yǔ)句及算法的目的以及要得到的結(jié)果,但不要對(duì)其細(xì)節(jié)進(jìn)行過(guò)多的描述
4.2.5 在塊和過(guò)程的開(kāi)頭注釋中還可以增加要訪問(wèn)的數(shù)據(jù)庫(kù)等信息 4.3 常用SQL語(yǔ)句的編寫(xiě)規(guī)范 4.3.1 CREATE語(yǔ)句
CREATE TABLE dft_dksz(YHBS
VARCHAR2(20)
NOT NULL,ZHGX
DATE,DKKHD
VARCHAR2(24),CONSTRAINT pk_dksz_yhbs PRIMARY KEY(YHBS))
4.3.2 SELECT語(yǔ)句
查詢(xún)語(yǔ)句采用以下原則編寫(xiě)(可最大化重用共享池中的SQL語(yǔ)句,提高應(yīng)用程序性能): ?
將SELECT語(yǔ)句分為5部分:(1)由SELECT開(kāi)頭,后跟一個(gè)顯示查詢(xún)結(jié)果的列表;
(2)由FROM開(kāi)頭,后跟一個(gè)或多個(gè)獲取數(shù)據(jù)所涉及的表;(3)由WHERE開(kāi)頭,后跟一個(gè)或多個(gè)確定所需值的條件;
(4)由GROUP BY開(kāi)頭,后跟一個(gè)或多個(gè)表列名,通過(guò)這些列以對(duì)查詢(xún)結(jié)果進(jìn)行匯總;(5)由ORDER BY開(kāi)頭,后跟一個(gè)或多個(gè)表列名,通過(guò)這些列以對(duì)查詢(xún)結(jié)果進(jìn)行排序。?
每個(gè)部分分行編寫(xiě),將每一行的第一個(gè)關(guān)鍵字與第一行的SELECT尾部對(duì)齊,如 SELECT col1, col2, col3
FROM table1 WHERE col1 > col2 GROUP BY col1, col2 ORDER BY col1;?
關(guān)鍵字用大寫(xiě),列名和表名采用小寫(xiě)
?
語(yǔ)句中嵌入逗號(hào)時(shí),在逗號(hào)后面加一空格,當(dāng)逗號(hào)是最后一個(gè)字符時(shí),把它放在本行
?
當(dāng)語(yǔ)句的同一部分要延續(xù)到下一行時(shí),按下列格式排列: SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 ?
將語(yǔ)句中WHERE和AND部分格式化,書(shū)寫(xiě)布局類(lèi)似于 WHERE
AND
AND ?
當(dāng)語(yǔ)句中出現(xiàn)括號(hào)時(shí),括號(hào)的兩邊不留空格
?
在SQL語(yǔ)句使用運(yùn)算符時(shí),操作兩邊應(yīng)各留一個(gè)空格,如 WHERE X = Y
AND A = B
AND C = D 4.3.3 INSERT語(yǔ)句
INSERT INTO <要插入的表名>
(<列1>, <列2>,.., <列n-1>, <列n>)
VALUES
(<列1值>, <列2值>,.., <列n-1值>, <列n值>)4.3.4 UPDATE語(yǔ)句
UPDATE <要更新的表名>
SET <要更新的列> = <列值> 4.3.5 DELETE語(yǔ)句 DELETE FROM table1 WHERE col1 = '???' 4.4 條件執(zhí)行語(yǔ)句(IF)編寫(xiě)規(guī)范
條件執(zhí)行語(yǔ)句IF?ELSE按以下格式編寫(xiě) IF <條件表達(dá)式> THEN
<一條或多條語(yǔ)句> [ELSE(或ELSIF<條件表達(dá)式>)THEN
<一條或多條語(yǔ)句> END IF;注:(1)
在IF?THEN和ELSE(或ELSIF)及ELSE?THEN和END IF間可包含一條或多條PL/SQL語(yǔ)句,而不需要加BEGIN和END(2)
IF?ELSE?ENDIF語(yǔ)句可以嵌套(3)
注意ELSIF的寫(xiě)法 4.5 循環(huán)語(yǔ)句編寫(xiě)規(guī)范 4.5.1 簡(jiǎn)單循環(huán)語(yǔ)句 LOOP
<零條或多條語(yǔ)句> EXIT WHEN <條件表達(dá)式>
<零條或多條語(yǔ)句> END LOOP;4.5.2 FOR循環(huán)語(yǔ)句
FOR 變量 IN [變量取值范圍] LOOP
<一條或多條語(yǔ)句> END LOOP;4.5.3 WHILE循環(huán)語(yǔ)句 WHILE <條件表達(dá)式> LOOP
<一條或多條語(yǔ)句> END LOOP;4.6 函數(shù)文本(存儲(chǔ)過(guò)程、函數(shù)和包等)
?
對(duì)于存儲(chǔ)過(guò)程、函數(shù)等程序塊都要有異常處理部分,在異常部分的最后都要設(shè)置OTHERS異常情態(tài)處理器,以提高程序的自檢能力,格式如下: BEGIN
? EXCEPTION WHEN excep—name1 THEN
?
WHEN excep—name2 THEN
? WHEN OTHERS THEN
?
END;?
對(duì)于子程序、觸發(fā)器、包等帶名的程序塊,要使用結(jié)束標(biāo)識(shí),如 CREATE OR REPLACE PROCEDURE XXXsp_XXX IS
? BEGIN
?
END XXXsp_XXX;
第五篇:C#編碼規(guī)范及命名規(guī)范
山東鋒士自動(dòng)化系統(tǒng)有限公司
C# 編碼規(guī)范
指導(dǎo)規(guī)則和最佳實(shí)踐 Version 1.0
董毅 2010/4/26
第一條 編碼的風(fēng)格和細(xì)節(jié)要求
編碼風(fēng)格
至少在單一文件中縮進(jìn)和風(fēng)格要保持一致,同一行中內(nèi)容不要太長(zhǎng),最好不要大于10個(gè)單詞。不要隨意地或者以容易混淆作用域嵌套關(guān)系的方式放置括號(hào),要盡量遵循每個(gè)文件中已經(jīng)使用的體例。
命名約定和規(guī)范
1.不要使用晦澀的名稱(chēng),起名要簡(jiǎn)單易懂
a.避免使用單字母做變量名,比如:i 或者 t。應(yīng)使用index或者temp進(jìn)行替代 b.不要縮寫(xiě)單詞,比如用num代替number 2.使用全大寫(xiě)字母表示宏,常量,如:LIKE_THIS 3.類(lèi),函數(shù)和枚舉的名稱(chēng)的單詞首字母大寫(xiě),如:LikeThis public class SomeClass {
const int DefaultSize = 100;public void SomeMethod(){ } } 4.變量的首字母小寫(xiě),其他單詞首字母大寫(xiě),如:likeThis void MyMethod(int someNumber){ int number;} 5.接口的第一個(gè)字母用I開(kāi)頭
interface IMyInterface {...} 6.私有成員變量以m_開(kāi)頭,剩余內(nèi)容遵從首字母大寫(xiě)的規(guī)范
public class SomeClass { private int m_Number;} 7.屬性類(lèi)以Attribute做后綴,異常類(lèi)以Exception做后綴
8.命名方法以【動(dòng)詞】-【目標(biāo)】組成,比如:ShowDialog()
9.擁有返回值的方法應(yīng)該以返回值描述其方法名,比如:GetObjectState()10.總是使用C#的預(yù)定義類(lèi)型,而不是System命名空間中的別名,比如:
object 而不是
Object string 而不是
String int
而不是
Int32 11.對(duì)于基類(lèi),類(lèi)型描述采用大寫(xiě)字母。當(dāng)處理.NET中的類(lèi)型時(shí)才保留后綴Type //正確
public class LinkedList
public class LikedList
12.使用有意義的名字空間,比如項(xiàng)目名稱(chēng)或者公司名稱(chēng) 13.避免使用類(lèi)的全稱(chēng),而是使用using語(yǔ)句進(jìn)行引用 14.避免在命名空間內(nèi)使用using語(yǔ)句
15.將所有framework命名空間嗎放在一起,后面放自定義或第三方的命名空間名
using System;using System.Collections;using System.ComponentModel;using System.Data;using MyCompany;using MyControls;
16.采用委托推斷,不要顯式實(shí)例化委托
delegate void SomeDelegate();public void SomeMethod(){ } SomeDelegate someDelegate = SomeMethod;
17.縮進(jìn)至少在同一文件中要保持統(tǒng)一風(fēng)格,注釋縮進(jìn)和其注釋的代碼在同一層次 18.所有注釋要經(jīng)過(guò)認(rèn)真檢查,不要有不明語(yǔ)義或者錯(cuò)別字 19.所有成員變量應(yīng)該定義在前面,和屬性或方法間空開(kāi)一行
public class MyClass { int m_Number;string m_Name;
public void SomeMethod1(){ } public void SomeMethod2(){ } }
20.局部變量的定義盡可能靠近它的初次使用 21.文件名應(yīng)該體現(xiàn)其包含的類(lèi)
22.當(dāng)使用partial類(lèi)型且每部分分配一個(gè)文件時(shí),以類(lèi)名+邏輯部分的方式來(lái)命名文件
//MyClass.cs public partial class MyClass { } //MyClass.Designer.cs public partial class MyClass { } 23.做大括號(hào)總是放在新行中
24.匿名方法模仿普通方法布局,但是大括號(hào)要和委托聲明對(duì)其
delegate void SomeDelegate(string someString);//正確
void InvokeMethod(){ SomeDelegate someDelegate = delegate(string name){ MessageBox.Show(name);};someDelegate(“Juval”);} //錯(cuò)誤
void InvokeMethod(){ SomeDelegate someDelegate = delegate(string name){ MessageBox.Show(name);};someDelegate(“Juval”);}
25.沒(méi)有參數(shù)的匿名方法使用空括號(hào),僅當(dāng)匿名方法被用于任何委托時(shí)才可以省略括號(hào)
delegate void SomeDelegate();//正確
SomeDelegate someDelegate1 = delegate(){ MessageBox.Show(“Hello”);};//錯(cuò)誤
SomeDelegate someDelegate1 = delegate { MessageBox.Show(“Hello”);};
26.在使用Lambda表達(dá)式時(shí),模仿一般的方法規(guī)范。
delegate void SomeDelegate(string someString);
SomeDelegate someDelegate =(name)=> { Trace.WriteLine(name);MessageBox.Show(name);};
27.當(dāng)內(nèi)聯(lián)Lambda表達(dá)式僅包含一個(gè)簡(jiǎn)單的語(yǔ)句時(shí),應(yīng)避免多語(yǔ)句或者返回語(yǔ)句出現(xiàn)在大括號(hào)中??梢院?jiǎn)單使用小括號(hào)表達(dá):
delegate void SomeDelegate(string someString);
void MyMethod(SomeDelegate someDelegate){ }
//正確
MyMethod(name=>MessageBox.Show(name));
//錯(cuò)誤
MyMethod((name)=>{Trace.WriteLine(name);MessageBox.Show(name);});注釋
編寫(xiě)有用的注釋?zhuān)灰谧⑨屩兄貜?fù)寫(xiě)代碼語(yǔ)義。應(yīng)該編寫(xiě)的是解釋方法和原理的說(shuō)明性注釋。
函數(shù)
不要在一個(gè)函數(shù)中包含太多內(nèi)容,函數(shù)的功能要簡(jiǎn)單,短小,使人更容易理解,也有利于防錯(cuò)。
第二條 盡量在代碼中不包含被警告的內(nèi)容
高度重視警告:使用編譯器的最高警告級(jí)別。構(gòu)建盡量做到干凈利落(沒(méi)有警告)。理解所有的警告。通過(guò)修改代碼而不是降低警告級(jí)別來(lái)排除警告。
即使程序一開(kāi)始似乎能夠正確運(yùn)行,也還是要這樣做。即使你能夠肯定警告是良心的,仍然要這樣做。因?yàn)榱夹跃娴谋澈罂赡茈[藏著未來(lái)指向真正危險(xiǎn)的警告。
項(xiàng)目設(shè)置和項(xiàng)目結(jié)構(gòu)
1. 總是以4級(jí)警告建立項(xiàng)目
2. 在發(fā)布版中將警告當(dāng)作錯(cuò)誤(注意這不是VS.NET的缺省設(shè)置)
3. 永遠(yuǎn)不要抑制特定的編譯警告
4. 總是在應(yīng)用程序的配置文件中顯式地說(shuō)明支持的運(yùn)行時(shí)版本
5. 避免顯式的自定義版本改向和綁定到CLR程序集
6. 不要在AssemblyInfo.cs中放任何邏輯。除了在AssemblyInfo.cs中,不要在任何文件中放程序集屬性(應(yīng)包括公司名稱(chēng)、描述、版權(quán)等)7. 所有程序集應(yīng)該使用相對(duì)路徑引用 8. 不允許在程序集中循環(huán)引用
9. 努力對(duì)同一邏輯應(yīng)用程序中(通常是一個(gè)解決方案)的所有程序集和客戶(hù)端使用統(tǒng)一的版本號(hào)
10.將Visual Studio.NET應(yīng)用配置文件命名為App.config,并將其包括在項(xiàng)目中 11. 將Visual Studio.NET缺省的項(xiàng)目結(jié)構(gòu)改為標(biāo)準(zhǔn)的布局,對(duì)項(xiàng)目文件夾和文件應(yīng)用統(tǒng)一的結(jié)構(gòu) 12. 一個(gè)發(fā)布版本應(yīng)該包含Debug標(biāo)記
第三方頭文件
無(wú)法修改的庫(kù)頭文件可能包含引起警告的構(gòu)造。如果這樣,可以用自己的包含原頭文件的版本將此文件包裝起來(lái),并有選擇的為該作用域關(guān)閉警告,然后在整個(gè)項(xiàng)目的其他地方包含此包裝文件。
代碼中盡量不包含未使用的函數(shù),變量
經(jīng)確認(rèn)確實(shí)不需要使用的函數(shù),變量(不包括為未來(lái)使用而設(shè)的占位符),可以進(jìn)行刪除處理。
不要遺漏return語(yǔ)句
PS:例外情況
有時(shí)候編譯器可能會(huì)發(fā)出一些確實(shí)無(wú)意義的警告。這些警告要經(jīng)過(guò)團(tuán)隊(duì)確認(rèn)后盡量在局部進(jìn)行屏蔽,但要做出明確的注釋?zhuān)f(shuō)明為什么必須禁用。
第三條 使用自動(dòng)構(gòu)建系統(tǒng) 第四條 使用版本控制系統(tǒng)
應(yīng)確保每次提交的代碼都可以構(gòu)建成功。
第五條 定期進(jìn)行代碼審查
互相閱讀彼此的代碼不但可以盡快提高自己的編碼水平,也可以相互借鑒更好的方法。
第六條 一個(gè)實(shí)體應(yīng)該只有一個(gè)緊湊的職責(zé)
一次只解決一個(gè)問(wèn)題:只給一個(gè)實(shí)體(變量、類(lèi)、函數(shù)、名稱(chēng)空間、模塊和庫(kù))賦予一個(gè)定義良好的職責(zé)。應(yīng)該只選擇目的單一的函數(shù),小而且目的單一的類(lèi),和邊界清晰的緊湊模塊。
應(yīng)該用較小的低層抽象構(gòu)建更高層次的抽象,要避免將幾個(gè)低層抽象集合成一個(gè)較大的低層次抽象聚合體。用幾個(gè)簡(jiǎn)單的行為來(lái)實(shí)現(xiàn)一個(gè)復(fù)雜的行為,比反其道而行之更加容易。
第七條 正確,簡(jiǎn)單和清晰第一
軟件簡(jiǎn)單為美:正確優(yōu)于速度,簡(jiǎn)單優(yōu)于復(fù)雜,清晰優(yōu)于機(jī)巧,安全優(yōu)于不安全。
要避免使用程序設(shè)計(jì)語(yǔ)言中的冷僻特性。應(yīng)該使用最簡(jiǎn)單的有效技術(shù)。不要使用不必要的操作符重載
構(gòu)造函數(shù)的參數(shù),應(yīng)該使用命名變量,而不要使用臨時(shí)變量
這能夠避免可能的聲明二義性,還經(jīng)常能使代碼的意圖更加清晰,從而更容易維護(hù),而且也更安全。
第八條 編程中應(yīng)該知道何時(shí)和如何考慮可伸縮性
當(dāng)數(shù)據(jù)爆炸性增長(zhǎng)時(shí):不要進(jìn)行不成熟的優(yōu)化,如果能夠證明優(yōu)化必要而且非常重要,則應(yīng)該集中精力改善算法的復(fù)雜性,而不是進(jìn)行小型的優(yōu)化,比如節(jié)省一個(gè)多余的加法運(yùn)算。
為了避免未來(lái)可能遭遇到的數(shù)據(jù)處理容量上的瓶頸問(wèn)題,應(yīng)該預(yù)先做這些事情:
使用靈活的、動(dòng)態(tài)分配的數(shù)據(jù),不要使用固定大小的數(shù)組
那種“比現(xiàn)在所需要的最大數(shù)組還要大”的數(shù)組,在正確性和安全性方面都存在嚴(yán)重問(wèn)題。只有在編譯時(shí)大小固定不變的數(shù)組才是可接受的。
了解算法的實(shí)際復(fù)雜性
要留心那些不易發(fā)覺(jué)的陷阱,比如看似線性的算法實(shí)際上要調(diào)用其他線性操作,結(jié)果算法實(shí)際上是二次的。
優(yōu)先使用線性算法或者盡可能快的算法 盡可能避免劣于線性復(fù)雜性的算法
如果面對(duì)的是一個(gè)O(NlogN)或者O(N2)算法,就必須花費(fèi)精力尋找替代方案,只有代碼才不至于在數(shù)據(jù)量顯著增長(zhǎng)的情況下陷入深度激增的性能深潭。例如:建議使用范圍成員函數(shù)(通常是線性的)而不是反復(fù)調(diào)用單元素替代函數(shù),后者會(huì)很容易在一個(gè)線性的操作要調(diào)用另一個(gè)線性操作時(shí)變成二次復(fù)雜性。永遠(yuǎn)不要使用指數(shù)復(fù)雜性的算法,除非真的別無(wú)選擇
在決定接受指數(shù)算法之前,必須盡力尋找替代方案,因?yàn)閷?duì)于指數(shù)算法來(lái)說(shuō),即使是數(shù)據(jù)量的有限增加,也會(huì)使算法的性能急劇下降。
總而言之,要盡可能優(yōu)先使用線性(或者更好的)算法,盡可能合理的避免使用比線性算法差的多項(xiàng)式算法。竭盡全力避免使用指數(shù)算法。
第九條 不要進(jìn)行不成熟的優(yōu)化
我們將不成熟的優(yōu)化定義為這樣的行為:以性能為名,使設(shè)計(jì)或代碼更加復(fù)雜,從而導(dǎo)致可讀性更差,卻沒(méi)有經(jīng)過(guò)驗(yàn)證的性能需求(比如實(shí)際的度量數(shù)據(jù)與目標(biāo)的比較結(jié)果)作為正當(dāng)理由,因此本質(zhì)上對(duì)程序沒(méi)有真正的好處。
因此,默認(rèn)時(shí),不要把注意力集中在如何使代碼更快上;首先關(guān)注的應(yīng)該是使代碼盡可能的清晰和易讀。
第十條 不要進(jìn)行不必要的劣化
所謂不成熟的劣化一詞,指的就是編寫(xiě)如下這些沒(méi)有必要的、可能比較低效的程序:
在可以用通過(guò)引用傳遞的時(shí)候,卻定義了通過(guò)值傳遞的參數(shù) 在使用前綴++操作符很合適的場(chǎng)合,卻使用后綴版本 在構(gòu)造函數(shù)中使用賦值操作而不是初始化列表
第十一條 盡量減少全局和共享數(shù)據(jù)
共享會(huì)導(dǎo)致沖突:避免共享數(shù)據(jù),尤其是全局?jǐn)?shù)據(jù)。共享數(shù)據(jù)會(huì)增加耦合度,從而降低可維護(hù)性,通常還會(huì)降低性能。
名字空間作用域中的對(duì)象、靜態(tài)成員對(duì)象或者跨線程或跨進(jìn)程共享的對(duì)象會(huì)減少多線程和多處理器環(huán)境中的并行性,往往是產(chǎn)生性能和可伸縮性瓶頸的源頭。建議用通信方式(比如消息隊(duì)列)代替數(shù)據(jù)共享。盡量降低類(lèi)之間的耦合,盡量減少交互
第十二條 隱藏信息
不要泄密:不要公開(kāi)提供抽象的實(shí)體的內(nèi)部信息。而應(yīng)該公開(kāi)抽象(至少是get/set抽象),而不是數(shù)據(jù)。
數(shù)據(jù)只是抽象、概念性狀態(tài)的一種可能的具體化而已。如果將注意力集中在概念而不是其表示形式上,就能夠提供富于提示性的接口,并按需要對(duì)實(shí)現(xiàn)進(jìn)行調(diào)整。比如緩存還是實(shí)時(shí)地計(jì)算,又比如使用不同的表示方式,針對(duì)某種使用模式進(jìn)行優(yōu)化。
絕對(duì)不要將類(lèi)的數(shù)據(jù)成員設(shè)為public,僅對(duì)最需要的類(lèi)型標(biāo)記為public,其他的標(biāo)記為internal。它同樣適用于更大的實(shí)體比如程序庫(kù)。模塊和程序庫(kù)同樣應(yīng)該提供定義抽象和其中信息流的接口,從而使與調(diào)用代碼的通信比采用數(shù)據(jù)共享方式更安全,耦合度更低。
第十三條 盡量在編譯和連接時(shí)檢查錯(cuò)誤,而不要等到運(yùn)行時(shí)
運(yùn)行時(shí)檢查取決于控制流和數(shù)據(jù)的具體情況,這意味著很難知道檢查是否徹底。相比而言,編譯時(shí)檢查與控制流和數(shù)據(jù)無(wú)關(guān),一般情況下能夠獲得更高的可信度。
第十四條 盡量合理的使用const常量
不變的值更易于理解、跟蹤和分析,所以應(yīng)該盡可能地使用常量代替變量,定義值的時(shí)候,應(yīng)該把常量作為默認(rèn)的選項(xiàng):常量很安全,在編譯時(shí)會(huì)對(duì)其進(jìn)行檢查。盡量不要強(qiáng)制轉(zhuǎn)換常量的類(lèi)型。
例如:
const int x = 0;public const double productWeight = 11.7;private const string productName = “Visual C#”;
第十五條 避免使用語(yǔ)義不清的參數(shù)
要避免在代碼中使用諸如42和3.14159這樣的文字常量。它們本身沒(méi)有提供任何說(shuō)明,并且因?yàn)樵黾恿藱z測(cè)的重復(fù)而使維護(hù)更加復(fù)雜??梢杂梅?hào)名稱(chēng)和表達(dá)式替換它們,比如width*aspectRatio
名稱(chēng)能夠增加信息,并提供單一的維護(hù)點(diǎn),而程序中到處重復(fù)的原始數(shù)據(jù)是無(wú)名的,維護(hù)起來(lái)很麻煩。常量應(yīng)該是枚舉或者const值,有合適的作用域和名稱(chēng)。
重要的特定于領(lǐng)域的常量應(yīng)該放在名字空間一級(jí)
第十六條 盡可能局部的使用變量 第十七條 避免函數(shù)過(guò)長(zhǎng),避免嵌套過(guò)深
過(guò)長(zhǎng)的函數(shù)和嵌套過(guò)深的代碼塊的出現(xiàn),經(jīng)常是因?yàn)闆](méi)能賦予一個(gè)函數(shù)以一個(gè)緊湊的職責(zé)所致,這兩種情況通常都能夠通過(guò)更好的重構(gòu)予以解決。每個(gè)函數(shù)都應(yīng)該是顧其名而能思其義,易于理解的工作單元,要避免將多個(gè)小概念單元合并到一個(gè)長(zhǎng)的函數(shù)體中的做法。
一些建議:
盡量緊湊:對(duì)一個(gè)函數(shù)只賦予一種職責(zé)
不要自我重復(fù):優(yōu)先使用命名函數(shù),而不要讓相似的代碼片斷反復(fù)出現(xiàn) 優(yōu)先使用&&:在可以使用&&條件判斷的地方要避免使用連續(xù)嵌套的if 不要過(guò)分使用try 優(yōu)先使用標(biāo)準(zhǔn)算法
不要根據(jù)類(lèi)型標(biāo)簽(type tag)進(jìn)行分支(switch)第十八條 盡量減少定義性依賴(lài),避免循環(huán)依賴(lài)
循環(huán)依賴(lài)是指兩個(gè)模塊直接或者間接地相互依賴(lài)。所謂模塊就是一個(gè)緊湊的發(fā)布單元,而互相依賴(lài)的多個(gè)模塊并不是真正的獨(dú)立模塊,而是緊緊膠著在一起的一個(gè)更大的模塊,因此,循環(huán)依賴(lài)有礙于模塊性,是大型項(xiàng)目的禍根。請(qǐng)避免循環(huán)依賴(lài)。
第十九條 不要引用多余的資源文件 第二十條 盡量不要重載默認(rèn)的操作符,至少應(yīng)保證操作符的自然語(yǔ)義不被破壞 第二十一條 優(yōu)先使用++和—的標(biāo)準(zhǔn)形式。優(yōu)先調(diào)用前綴形式。第二十二條 用小類(lèi)代替巨類(lèi)
小類(lèi)更易于編寫(xiě),更易于保證正確、測(cè)試和使用。小類(lèi)更有可能適用于各種不同情況。應(yīng)該用這種小類(lèi)體現(xiàn)簡(jiǎn)單概念,不要用大雜燴式的類(lèi)。
第二十三條 要避免使用隱式轉(zhuǎn)換
在做類(lèi)型提供隱式轉(zhuǎn)換之前,請(qǐng)三思而行,應(yīng)該依賴(lài)的是顯式轉(zhuǎn)換。
隱式轉(zhuǎn)換有兩個(gè)主要的問(wèn)題:
1.它們會(huì)在最意料不到的地方拋出異常
2.它們并不總是能與語(yǔ)言的其他元素有效地配合 第二十四條 將數(shù)據(jù)成員設(shè)為私有的,無(wú)行為的聚集
要避免將公用數(shù)據(jù)和非公用數(shù)據(jù)混合在一起,因?yàn)檫@幾乎總是設(shè)計(jì)混亂的標(biāo)志。信息隱藏是優(yōu)秀軟件工程的關(guān)鍵,應(yīng)該將所有數(shù)據(jù)成員都設(shè)為私有的,這是類(lèi)用來(lái)保持其不變式的最佳方式。
第二十五條 不要允許異??缭侥K邊界傳播
最低限度,應(yīng)用程序必須在以下位置有捕獲所有異常的catch(…)兜底語(yǔ)句,其中大多數(shù)都直接適用于模塊:
1.在main函數(shù)的附近:捕獲并用日志記錄任何將使程序不正常終止而其他地方又沒(méi)有捕獲的異常。
2.在從無(wú)法控制的代碼中執(zhí)行回調(diào)附近3.在現(xiàn)場(chǎng)邊界的附近4.在模塊接口邊界的附近
5.在IO,數(shù)據(jù)庫(kù)連接等高危操作附近
第二十六條 如有可能,盡量用算法調(diào)用代替手工編寫(xiě)的循環(huán)
對(duì)非常簡(jiǎn)單的循環(huán)而言,手工編寫(xiě)的循環(huán)有可能是最簡(jiǎn)單也是最有效的解決方案。但是編寫(xiě)算法調(diào)用代替手工編寫(xiě)的循環(huán),可以使表達(dá)力更強(qiáng)、維護(hù)性更好、更不易出錯(cuò),而且同樣高效。
第二十七條 編碼慣例
1. 避免在一個(gè)文件中放多個(gè)類(lèi)
2. 一個(gè)文件應(yīng)該只對(duì)一個(gè)命名空間提供類(lèi)型,避免在同一文件中有多個(gè)命名空間 3. 避免一個(gè)文件的長(zhǎng)度超過(guò)500行(除了機(jī)器生成的代碼)4. 避免方法定義超過(guò)25行
5. 避免超過(guò)5個(gè)參數(shù)的方法,使用結(jié)構(gòu)傳遞多個(gè)參數(shù) 6. 每行應(yīng)該不超過(guò)80個(gè)字符,或者10個(gè)單詞 7. 不要手工編輯任何機(jī)器生成的代碼
A.如果修改機(jī)器生成的代碼,修改代碼格式和風(fēng)格以符合本編碼標(biāo)準(zhǔn) B.盡可能使用partial類(lèi)以分解出需要維護(hù)的部分 8. 避免對(duì)顯而易見(jiàn)的內(nèi)容作注釋
A.代碼應(yīng)該是自解釋的,由可讀性強(qiáng)的變量和方法組成的好的代碼應(yīng)該不需要注釋 B.參加第一條中的注釋部分
9. 僅對(duì)操作的前提、內(nèi)在的算法等寫(xiě)文檔 10. 避免方法級(jí)的文檔
A.對(duì)API文檔采用大量的外部文檔
B.方法級(jí)注釋僅作為對(duì)其他開(kāi)發(fā)人員的提示 11. 決不要硬編碼數(shù)值,聲明一個(gè)常量是最好的選擇 12. 僅對(duì)本輪就是常量的值使用const修飾符,例如一周的天數(shù) 13. 避免對(duì)只讀變量使用const修飾符。在此情況下,采用readonly修飾符
public class MyClass { public const int DaysInWeek = 7;public readonly int Number;public MyClass(int someValue){ Number = someValue;} }
14.對(duì)任何假設(shè)采用assert。平均來(lái)講,每五行代碼中就有一行是斷言
using System.Diagnostics;object GetObject(){} object someObject = GetObject();Debug.Assert(someObject!= null);
15. 16. 17. 每行代碼都應(yīng)該經(jīng)過(guò)白盒測(cè)試 僅捕獲已經(jīng)顯式處理了的異常
在拋出異常的catch語(yǔ)句中,總是拋出最初異常以保持最初錯(cuò)誤的堆棧位置
catch(Exception exception){ MessageBox.Show(exception.Message);throw;}
18. 定義自定義的異常時(shí)
A.從ApplicationException繼承 B.提供自定義的序列化 19. 避免采用friend程序集,因?yàn)檫@樣增加了程序集間的耦合度 20. 避免使用依賴(lài)于從特定位置運(yùn)行的程序集的代碼。21. 盡量減少應(yīng)用程序集(客戶(hù)端EXE程序集)的代碼,采用類(lèi)庫(kù)而不要包含業(yè)務(wù)邏輯層代碼。22. 避免對(duì)枚舉提供明確的值
//正確
public enum Color { Red,Green,Blue } //錯(cuò)誤
public enum Color { Red=1,Green=2,Blue=3 }
23. 避免對(duì)枚舉指定類(lèi)型
//錯(cuò)誤
public enum Color : long { Red, Green, Blue }
24. 25. 26. If語(yǔ)句總是使用括號(hào),即使它只包含一句語(yǔ)句 避免使用?:條件運(yùn)算符 避免使用(#if…#endif),應(yīng)使用conditional方法代替
[Conditianal(“MySpecialCondition”] public void MyMethod(){}
27. 避免在布爾條件語(yǔ)句中調(diào)用函數(shù),賦值到局部變量并檢查它們的值。
bool IsEverythingOK(){} //錯(cuò)誤
if(IsEverythingOK()){} //正確
bool ok=IsEverythingOK();if(ok){}
28.29. 總是使用從0開(kāi)始的數(shù)組
總是使用一個(gè)for循環(huán)顯式地初始化一個(gè)引用類(lèi)型數(shù)組
public class MyClass {} const int ArraySize=100;MyClass[] array=new MyClass{ArraySize];for(int index=0;index 30. 31. 不用提供public或protected成員變量,而是使用屬性 應(yīng)盡量使用get/set的自動(dòng)返回屬性 //錯(cuò)誤 class MyClass { int m_Number; public int Number { get { return m_Number;} set { m_Number=value;} } } //正確 class MyClass { public int Number { get;set;} } 32. 33. 34. 35. 避免使用new,應(yīng)使用override替代 在一個(gè)密封的類(lèi)里總是把public和protected方法標(biāo)記為virtual 永遠(yuǎn)不要使用不安全的代碼 合理使用as操作符進(jìn)行映射 Dog dog = new GermanShepherd();GermanSheperd shepherd = dog as GermanShepherd;if(shepherd!= null){} 36. 37. { 在使用一個(gè)委托前總是要先檢查它是否為空(null) 不要提供公有成員變量,使用存取器(accessors)進(jìn)行替代 public class MyPublisher MyDelegate m_SomeEvent;public event MyDelegate SomeEvent { add { m_SomeEvent += value;} remove { m_SomeEvent-= value;} } } 38. 避免定義事件處理委托,使用EventHandler SomeType obj1;IMyInterface obj2; obj2=obj1 as IMyInterface;if(obj2!= null){ obj2.Method1();} else { //處理可能出現(xiàn)的錯(cuò)誤 } 44. 不要將可能改變的,或用于數(shù)據(jù)庫(kù)連接的,或者交付給最終客戶(hù)使用的任何字符串進(jìn)行硬編碼,要使用資源文件定義他們 45. 使用String.Empty代替”” //錯(cuò)誤 string name = “";//正確 string name = String.Empty; 46. 47. 48. 定義長(zhǎng)字符串的時(shí)候,應(yīng)該使用StringBuilder,而不是string 永遠(yuǎn)不要使用goto語(yǔ)句,除非迫不得已 在switch代碼塊中總要包含一個(gè)default項(xiàng),并且為其設(shè)置斷言 int number = SomeMethod();switch(number){ case 1: Trace.WriteLine(”Case 1:“);break;case 2: Trace.WriteLine(”Case 2:“);break;default: Debug.Assert(false);break;} 49.不要使用this引用,除非某些特殊情況,比如從一個(gè)構(gòu)造器中運(yùn)行另外一個(gè) //一個(gè)正確使用this的例子 public class MyClass { public MyClass(string message){} public MyClass():this(”Hello"){} } 50. 不要使用base關(guān)鍵詞。除非你想要解決一個(gè)子類(lèi)成員和基類(lèi)間的名稱(chēng)沖突,或者運(yùn)行一個(gè)基類(lèi)構(gòu)造器 //一個(gè)正確使用base的例子 public class Dog { public Dog(string name){} virtual public void Bark(int howLong){} } public class GermanShepherd:Dog { public GermanShepherd(string name):base(name){} public override void Bark(int howLong){ base.Bark(howLong);} } 51. 不要使用GC.AddMemortyPressure(),不要依賴(lài)HandleCollector。合理的使用Dispose()和Finalize()方法 52. 一般情況下不要使用check來(lái)檢查代碼(防止性能損失),但是在可能的溢出區(qū)則使用check來(lái)保持代碼的安全性。安全性的優(yōu)先級(jí)永遠(yuǎn)高于性能。 int CalcPower(int number,int power){ int result=1;for(int count=1;count<=power;count++){ checked { result*=number;} } return result;} 53. 在代碼中要避免直接使用object數(shù)據(jù)類(lèi)型(System.Object),可以使用約束或者as進(jìn)行替代。 class SomeClass {} //錯(cuò)誤 class MyClass class MyClass 54.{} 一般而言,不要在通用接口中定義約束。接口級(jí)別的約束經(jīng)常會(huì)被強(qiáng)類(lèi)型所覆蓋 public class Customer //錯(cuò)誤 public interface IList public interface ICustomerList:IList 1. 總是對(duì)應(yīng)用程序私有的組件,集合等使用強(qiáng)名,這樣可以保證安全性 2. 在應(yīng)用程序配置文件中使用加密算法,進(jìn)行安全保護(hù) 3. 對(duì)不受控制的引用方法,要做適當(dāng)?shù)陌踩幚?,如加入斷言控?/p> 4. 不要使用SuppressUnmanagedCodeSecurity屬性 5. 不要使用/unsafe來(lái)切換TlbImp.exe的默認(rèn)行為。 6. 在服務(wù)器端要使用自定義的安全規(guī)則來(lái)擴(kuò)展Microsoft的默認(rèn)配置,以保證更高級(jí)別的安全性 7. 為防止引誘性攻擊,應(yīng)修改組件級(jí)別的運(yùn)行權(quán)限,限制其可能的不安全行為 8. 在編寫(xiě)Windows程序時(shí),在每個(gè)Main()中都要使用相應(yīng)的安全規(guī)則