第一篇:C 編碼規(guī)范之命名空間
C++編碼規(guī)范之命名空間
C++編碼規(guī)范之命名空間Namespaces在.cc文件中,提倡使用不具名的命名空間。使用具名命名空間時(shí),其名稱可基于項(xiàng)目或路徑名稱,不要使用using指示符。定義:命名空間將全局作用域細(xì)分為不同的,具名的作用域,可有效防止全局作用域的命名沖突。優(yōu)點(diǎn):命名空間提供了命名軸線.當(dāng)然類也提供了命名軸線。缺點(diǎn):命名空間具有迷惑性,因?yàn)樗鼈兒皖愐粯犹峁┝祟~外的命名軸線。在頭文件中使用不具名的空間容易違背C++的唯一定義原則。1)不具名命名空間在.cc文件中,允許甚至提倡使用不具名命名空間,以避免運(yùn)行時(shí)的命名沖突:namespace{//命名空間的內(nèi)容無需縮進(jìn)enum{UNUSED,EOF,ERROR};bool AtEof(){return pos_ == EOF;}}//namespace然而,與特定類關(guān)聯(lián)的文件作用域聲明在該類中被聲明為類型,靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù),而不是不具名命名空間的成員。像上文展示的那樣,不具名命名空間結(jié)束時(shí)用注釋//namespace標(biāo)識(shí)。注:不能在.h文件中使用不具名命名空間。2)具名命名空間命名空間將除文件包含,全局標(biāo)識(shí)的聲明/定義以及類的前置聲明外的整個(gè)源文件封裝起來,以同其他命名空間相區(qū)分。//.h文件namespace mynamespace{class MyClass{public:...void Foo();};}//namespace mynamespace//.cc文件namespace mynamespace{//函數(shù)定義都置于命名空間中void MyClass::Foo(){...} }//namespace mynamespace禁止污染命名空間using namespace foo;
第二篇: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.不要使用晦澀的名稱,起名要簡(jiǎn)單易懂
a.避免使用單字母做變量名,比如:i 或者 t。應(yīng)使用index或者temp進(jìn)行替代 b.不要縮寫單詞,比如用num代替number 2.使用全大寫字母表示宏,常量,如:LIKE_THIS 3.類,函數(shù)和枚舉的名稱的單詞首字母大寫,如:LikeThis public class SomeClass {
const int DefaultSize = 100;public void SomeMethod(){ } } 4.變量的首字母小寫,其他單詞首字母大寫,如:likeThis void MyMethod(int someNumber){ int number;} 5.接口的第一個(gè)字母用I開頭
interface IMyInterface {...} 6.私有成員變量以m_開頭,剩余內(nèi)容遵從首字母大寫的規(guī)范
public class SomeClass { private int m_Number;} 7.屬性類以Attribute做后綴,異常類以Exception做后綴
8.命名方法以【動(dòng)詞】-【目標(biāo)】組成,比如:ShowDialog()
9.擁有返回值的方法應(yīng)該以返回值描述其方法名,比如:GetObjectState()10.總是使用C#的預(yù)定義類型,而不是System命名空間中的別名,比如:
object 而不是
Object string 而不是
String int
而不是
Int32 11.對(duì)于基類,類型描述采用大寫字母。當(dāng)處理.NET中的類型時(shí)才保留后綴Type //正確
public class LinkedList
public class LikedList
12.使用有意義的名字空間,比如項(xiàng)目名稱或者公司名稱 13.避免使用類的全稱,而是使用using語句進(jìn)行引用 14.避免在命名空間內(nèi)使用using語句
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)過認(rèn)真檢查,不要有不明語義或者錯(cuò)別字 19.所有成員變量應(yīng)該定義在前面,和屬性或方法間空開一行
public class MyClass { int m_Number;string m_Name;
public void SomeMethod1(){ } public void SomeMethod2(){ } }
20.局部變量的定義盡可能靠近它的初次使用 21.文件名應(yīng)該體現(xiàn)其包含的類
22.當(dāng)使用partial類型且每部分分配一個(gè)文件時(shí),以類名+邏輯部分的方式來命名文件
//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.沒有參數(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)單的語句時(shí),應(yīng)避免多語句或者返回語句出現(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);});注釋
編寫有用的注釋,不要在注釋中重復(fù)寫代碼語義。應(yīng)該編寫的是解釋方法和原理的說明性注釋。
函數(shù)
不要在一個(gè)函數(shù)中包含太多內(nèi)容,函數(shù)的功能要簡(jiǎn)單,短小,使人更容易理解,也有利于防錯(cuò)。
第二條 盡量在代碼中不包含被警告的內(nèi)容
高度重視警告:使用編譯器的最高警告級(jí)別。構(gòu)建盡量做到干凈利落(沒有警告)。理解所有的警告。通過修改代碼而不是降低警告級(jí)別來排除警告。
即使程序一開始似乎能夠正確運(yùn)行,也還是要這樣做。即使你能夠肯定警告是良心的,仍然要這樣做。因?yàn)榱夹跃娴谋澈罂赡茈[藏著未來指向真正危險(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)用程序的配置文件中顯式地說明支持的運(yùn)行時(shí)版本
5. 避免顯式的自定義版本改向和綁定到CLR程序集
6. 不要在AssemblyInfo.cs中放任何邏輯。除了在AssemblyInfo.cs中,不要在任何文件中放程序集屬性(應(yīng)包括公司名稱、描述、版權(quán)等)7. 所有程序集應(yīng)該使用相對(duì)路徑引用 8. 不允許在程序集中循環(huán)引用
9. 努力對(duì)同一邏輯應(yīng)用程序中(通常是一個(gè)解決方案)的所有程序集和客戶端使用統(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)記
第三方頭文件
無法修改的庫(kù)頭文件可能包含引起警告的構(gòu)造。如果這樣,可以用自己的包含原頭文件的版本將此文件包裝起來,并有選擇的為該作用域關(guān)閉警告,然后在整個(gè)項(xiàng)目的其他地方包含此包裝文件。
代碼中盡量不包含未使用的函數(shù),變量
經(jīng)確認(rèn)確實(shí)不需要使用的函數(shù),變量(不包括為未來使用而設(shè)的占位符),可以進(jìn)行刪除處理。
不要遺漏return語句
PS:例外情況
有時(shí)候編譯器可能會(huì)發(fā)出一些確實(shí)無意義的警告。這些警告要經(jīng)過團(tuán)隊(duì)確認(rèn)后盡量在局部進(jìn)行屏蔽,但要做出明確的注釋,說明為什么必須禁用。
第三條 使用自動(dòng)構(gòu)建系統(tǒng) 第四條 使用版本控制系統(tǒng)
應(yīng)確保每次提交的代碼都可以構(gòu)建成功。
第五條 定期進(jìn)行代碼審查
互相閱讀彼此的代碼不但可以盡快提高自己的編碼水平,也可以相互借鑒更好的方法。
第六條 一個(gè)實(shí)體應(yīng)該只有一個(gè)緊湊的職責(zé)
一次只解決一個(gè)問題:只給一個(gè)實(shí)體(變量、類、函數(shù)、名稱空間、模塊和庫(kù))賦予一個(gè)定義良好的職責(zé)。應(yīng)該只選擇目的單一的函數(shù),小而且目的單一的類,和邊界清晰的緊湊模塊。
應(yīng)該用較小的低層抽象構(gòu)建更高層次的抽象,要避免將幾個(gè)低層抽象集合成一個(gè)較大的低層次抽象聚合體。用幾個(gè)簡(jiǎn)單的行為來實(shí)現(xiàn)一個(gè)復(fù)雜的行為,比反其道而行之更加容易。
第七條 正確,簡(jiǎn)單和清晰第一
軟件簡(jiǎn)單為美:正確優(yōu)于速度,簡(jiǎn)單優(yōu)于復(fù)雜,清晰優(yōu)于機(jī)巧,安全優(yōu)于不安全。
要避免使用程序設(shè)計(jì)語言中的冷僻特性。應(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)算。
為了避免未來可能遭遇到的數(shù)據(jù)處理容量上的瓶頸問題,應(yīng)該預(yù)先做這些事情:
使用靈活的、動(dòng)態(tài)分配的數(shù)據(jù),不要使用固定大小的數(shù)組
那種“比現(xiàn)在所需要的最大數(shù)組還要大”的數(shù)組,在正確性和安全性方面都存在嚴(yán)重問題。只有在編譯時(shí)大小固定不變的數(shù)組才是可接受的。
了解算法的實(shí)際復(fù)雜性
要留心那些不易發(fā)覺的陷阱,比如看似線性的算法實(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ù)雜性的算法,除非真的別無選擇
在決定接受指數(shù)算法之前,必須盡力尋找替代方案,因?yàn)閷?duì)于指數(shù)算法來說,即使是數(shù)據(jù)量的有限增加,也會(huì)使算法的性能急劇下降。
總而言之,要盡可能優(yōu)先使用線性(或者更好的)算法,盡可能合理的避免使用比線性算法差的多項(xiàng)式算法。竭盡全力避免使用指數(shù)算法。
第九條 不要進(jìn)行不成熟的優(yōu)化
我們將不成熟的優(yōu)化定義為這樣的行為:以性能為名,使設(shè)計(jì)或代碼更加復(fù)雜,從而導(dǎo)致可讀性更差,卻沒有經(jīng)過驗(yàn)證的性能需求(比如實(shí)際的度量數(shù)據(jù)與目標(biāo)的比較結(jié)果)作為正當(dāng)理由,因此本質(zhì)上對(duì)程序沒有真正的好處。
因此,默認(rèn)時(shí),不要把注意力集中在如何使代碼更快上;首先關(guān)注的應(yīng)該是使代碼盡可能的清晰和易讀。
第十條 不要進(jìn)行不必要的劣化
所謂不成熟的劣化一詞,指的就是編寫如下這些沒有必要的、可能比較低效的程序:
在可以用通過引用傳遞的時(shí)候,卻定義了通過值傳遞的參數(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ù)共享。盡量降低類之間的耦合,盡量減少交互
第十二條 隱藏信息
不要泄密:不要公開提供抽象的實(shí)體的內(nèi)部信息。而應(yīng)該公開抽象(至少是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ì)不要將類的數(shù)據(jù)成員設(shè)為public,僅對(duì)最需要的類型標(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ù)無關(guān),一般情況下能夠獲得更高的可信度。
第十四條 盡量合理的使用const常量
不變的值更易于理解、跟蹤和分析,所以應(yīng)該盡可能地使用常量代替變量,定義值的時(shí)候,應(yīng)該把常量作為默認(rèn)的選項(xiàng):常量很安全,在編譯時(shí)會(huì)對(duì)其進(jìn)行檢查。盡量不要強(qiáng)制轉(zhuǎn)換常量的類型。
例如:
const int x = 0;public const double productWeight = 11.7;private const string productName = “Visual C#”;
第十五條 避免使用語義不清的參數(shù)
要避免在代碼中使用諸如42和3.14159這樣的文字常量。它們本身沒有提供任何說明,并且因?yàn)樵黾恿藱z測(cè)的重復(fù)而使維護(hù)更加復(fù)雜??梢杂梅?hào)名稱和表達(dá)式替換它們,比如width*aspectRatio
名稱能夠增加信息,并提供單一的維護(hù)點(diǎn),而程序中到處重復(fù)的原始數(shù)據(jù)是無名的,維護(hù)起來很麻煩。常量應(yīng)該是枚舉或者const值,有合適的作用域和名稱。
重要的特定于領(lǐng)域的常量應(yīng)該放在名字空間一級(jí)
第十六條 盡可能局部的使用變量 第十七條 避免函數(shù)過長(zhǎng),避免嵌套過深
過長(zhǎng)的函數(shù)和嵌套過深的代碼塊的出現(xiàn),經(jīng)常是因?yàn)闆]能賦予一個(gè)函數(shù)以一個(gè)緊湊的職責(zé)所致,這兩種情況通常都能夠通過更好的重構(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 不要過分使用try 優(yōu)先使用標(biāo)準(zhǔn)算法
不要根據(jù)類型標(biāo)簽(type tag)進(jìn)行分支(switch)第十八條 盡量減少定義性依賴,避免循環(huán)依賴
循環(huán)依賴是指兩個(gè)模塊直接或者間接地相互依賴。所謂模塊就是一個(gè)緊湊的發(fā)布單元,而互相依賴的多個(gè)模塊并不是真正的獨(dú)立模塊,而是緊緊膠著在一起的一個(gè)更大的模塊,因此,循環(huán)依賴有礙于模塊性,是大型項(xiàng)目的禍根。請(qǐng)避免循環(huán)依賴。
第十九條 不要引用多余的資源文件 第二十條 盡量不要重載默認(rèn)的操作符,至少應(yīng)保證操作符的自然語義不被破壞 第二十一條 優(yōu)先使用++和—的標(biāo)準(zhǔn)形式。優(yōu)先調(diào)用前綴形式。第二十二條 用小類代替巨類
小類更易于編寫,更易于保證正確、測(cè)試和使用。小類更有可能適用于各種不同情況。應(yīng)該用這種小類體現(xiàn)簡(jiǎn)單概念,不要用大雜燴式的類。
第二十三條 要避免使用隱式轉(zhuǎn)換
在做類型提供隱式轉(zhuǎn)換之前,請(qǐng)三思而行,應(yīng)該依賴的是顯式轉(zhuǎn)換。
隱式轉(zhuǎn)換有兩個(gè)主要的問題:
1.它們會(huì)在最意料不到的地方拋出異常
2.它們并不總是能與語言的其他元素有效地配合 第二十四條 將數(shù)據(jù)成員設(shè)為私有的,無行為的聚集
要避免將公用數(shù)據(jù)和非公用數(shù)據(jù)混合在一起,因?yàn)檫@幾乎總是設(shè)計(jì)混亂的標(biāo)志。信息隱藏是優(yōu)秀軟件工程的關(guān)鍵,應(yīng)該將所有數(shù)據(jù)成員都設(shè)為私有的,這是類用來保持其不變式的最佳方式。
第二十五條 不要允許異??缭侥K邊界傳播
最低限度,應(yīng)用程序必須在以下位置有捕獲所有異常的catch(…)兜底語句,其中大多數(shù)都直接適用于模塊:
1.在main函數(shù)的附近:捕獲并用日志記錄任何將使程序不正常終止而其他地方又沒有捕獲的異常。
2.在從無法控制的代碼中執(zhí)行回調(diào)附近3.在現(xiàn)場(chǎng)邊界的附近4.在模塊接口邊界的附近
5.在IO,數(shù)據(jù)庫(kù)連接等高危操作附近
第二十六條 如有可能,盡量用算法調(diào)用代替手工編寫的循環(huán)
對(duì)非常簡(jiǎn)單的循環(huán)而言,手工編寫的循環(huán)有可能是最簡(jiǎn)單也是最有效的解決方案。但是編寫算法調(diào)用代替手工編寫的循環(huán),可以使表達(dá)力更強(qiáng)、維護(hù)性更好、更不易出錯(cuò),而且同樣高效。
第二十七條 編碼慣例
1. 避免在一個(gè)文件中放多個(gè)類
2. 一個(gè)文件應(yīng)該只對(duì)一個(gè)命名空間提供類型,避免在同一文件中有多個(gè)命名空間 3. 避免一個(gè)文件的長(zhǎng)度超過500行(除了機(jī)器生成的代碼)4. 避免方法定義超過25行
5. 避免超過5個(gè)參數(shù)的方法,使用結(jié)構(gòu)傳遞多個(gè)參數(shù) 6. 每行應(yīng)該不超過80個(gè)字符,或者10個(gè)單詞 7. 不要手工編輯任何機(jī)器生成的代碼
A.如果修改機(jī)器生成的代碼,修改代碼格式和風(fēng)格以符合本編碼標(biāo)準(zhǔn) B.盡可能使用partial類以分解出需要維護(hù)的部分 8. 避免對(duì)顯而易見的內(nèi)容作注釋
A.代碼應(yīng)該是自解釋的,由可讀性強(qiáng)的變量和方法組成的好的代碼應(yīng)該不需要注釋 B.參加第一條中的注釋部分
9. 僅對(duì)操作的前提、內(nèi)在的算法等寫文檔 10. 避免方法級(jí)的文檔
A.對(duì)API文檔采用大量的外部文檔
B.方法級(jí)注釋僅作為對(duì)其他開發(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。平均來講,每五行代碼中就有一行是斷言
using System.Diagnostics;object GetObject(){} object someObject = GetObject();Debug.Assert(someObject!= null);
15. 16. 17. 每行代碼都應(yīng)該經(jīng)過白盒測(cè)試 僅捕獲已經(jīng)顯式處理了的異常
在拋出異常的catch語句中,總是拋出最初異常以保持最初錯(cuò)誤的堆棧位置
catch(Exception exception){ MessageBox.Show(exception.Message);throw;}
18. 定義自定義的異常時(shí)
A.從ApplicationException繼承 B.提供自定義的序列化 19. 避免采用friend程序集,因?yàn)檫@樣增加了程序集間的耦合度 20. 避免使用依賴于從特定位置運(yùn)行的程序集的代碼。21. 盡量減少應(yīng)用程序集(客戶端EXE程序集)的代碼,采用類庫(kù)而不要包含業(yè)務(wù)邏輯層代碼。22. 避免對(duì)枚舉提供明確的值
//正確
public enum Color { Red,Green,Blue } //錯(cuò)誤
public enum Color { Red=1,Green=2,Blue=3 }
23. 避免對(duì)枚舉指定類型
//錯(cuò)誤
public enum Color : long { Red, Green, Blue }
24. 25. 26. If語句總是使用括號(hào),即使它只包含一句語句 避免使用?:條件運(yùn)算符 避免使用(#if…#endif),應(yīng)使用conditional方法代替
[Conditianal(“MySpecialCondition”] public void MyMethod(){}
27. 避免在布爾條件語句中調(diào)用函數(shù),賦值到局部變量并檢查它們的值。
bool IsEverythingOK(){} //錯(cuò)誤
if(IsEverythingOK()){} //正確
bool ok=IsEverythingOK();if(ok){}
28.29. 總是使用從0開始的數(shù)組
總是使用一個(gè)for循環(huán)顯式地初始化一個(gè)引用類型數(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è)密封的類里總是把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ù)連接的,或者交付給最終客戶使用的任何字符串進(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語句,除非迫不得已 在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è)子類成員和基類間的名稱沖突,或者運(yùn)行一個(gè)基類構(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(),不要依賴HandleCollector。合理的使用Dispose()和Finalize()方法 52. 一般情況下不要使用check來檢查代碼(防止性能損失),但是在可能的溢出區(qū)則使用check來保持代碼的安全性。安全性的優(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ù)類型(System.Object),可以使用約束或者as進(jìn)行替代。 class SomeClass {} //錯(cuò)誤 class MyClass class MyClass 54.{} 一般而言,不要在通用接口中定義約束。接口級(jí)別的約束經(jīng)常會(huì)被強(qiáng)類型所覆蓋 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來切換TlbImp.exe的默認(rèn)行為。 6. 在服務(wù)器端要使用自定義的安全規(guī)則來擴(kuò)展Microsoft的默認(rèn)配置,以保證更高級(jí)別的安全性 7. 為防止引誘性攻擊,應(yīng)修改組件級(jí)別的運(yùn)行權(quán)限,限制其可能的不安全行為 8. 在編寫Windows程序時(shí),在每個(gè)Main()中都要使用相應(yīng)的安全規(guī)則 金融機(jī)構(gòu)編碼規(guī)范 中國(guó)人民銀行發(fā)布《金融機(jī)構(gòu)編碼規(guī)范》 日前,中國(guó)人民銀行發(fā)布了《金融機(jī)構(gòu)編碼規(guī)范》(以下簡(jiǎn)稱《規(guī)范》),從宏觀層面統(tǒng)一了我國(guó)金融機(jī)構(gòu)分類標(biāo)準(zhǔn),首次明確了我國(guó)金融機(jī)構(gòu)涵蓋范圍,界定了各類金融機(jī)構(gòu)具體組成,規(guī)范了金融機(jī)構(gòu)統(tǒng)計(jì)編碼方式與方法?!兑?guī)范》是加強(qiáng)金融業(yè)管理,維護(hù)金融安全的基礎(chǔ),也是構(gòu)建金融信息系統(tǒng),促進(jìn)金融信息共享的前提?!兑?guī)范》的發(fā)布是提高我國(guó)金融業(yè)管理水平的必然要求,為宏觀管理信息與微觀統(tǒng)計(jì)數(shù)據(jù)、國(guó)民經(jīng)濟(jì)運(yùn)行信息與金融運(yùn)行信息之間搭建了協(xié)調(diào)、溝通的橋梁。 金融機(jī)構(gòu)編碼規(guī)范 1.范圍 本規(guī)范規(guī)定了金融機(jī)構(gòu)的編碼對(duì)象、編碼結(jié)構(gòu)和表示形式,使每個(gè)編碼對(duì)象獲得一個(gè)唯一的代碼,以適應(yīng)金融機(jī)構(gòu)信息系統(tǒng) 建設(shè)和數(shù)據(jù)交換的需求。 本規(guī)范適用于金融機(jī)構(gòu)新建信息系統(tǒng)的開發(fā)、數(shù)據(jù)倉(cāng)庫(kù)的建 設(shè),也可用于指導(dǎo)已有信息系統(tǒng)的升級(jí)改造。 2.規(guī)范性引用文件 下列文件中的條款通過本規(guī)范的引用而成為本規(guī)范的條款。 凡是注日期的引用文件,其隨后所有的修改單(不包括勘誤的內(nèi) 容)或修訂版均不適用于本標(biāo)準(zhǔn),然而,鼓勵(lì)根據(jù)本規(guī)范達(dá)成協(xié) 議的各方研究是否可使用這些文件的最新版本。 GB/T 2260-2007中華人民共和國(guó)行政區(qū)劃代碼 GB/T 2659-2000世界各國(guó)和地區(qū)名稱代碼(eqv ISO 3166-1:1997) 3.術(shù)語和定義 下列術(shù)語和定義適用于本規(guī)范。 3.1 貨幣當(dāng)局 代表國(guó)家制定并執(zhí)行貨幣政策、金融運(yùn)行規(guī)則,管理國(guó)家儲(chǔ) 備,從事貨幣發(fā)行與管理,與國(guó)際貨幣基金組織交易及向其他存 款性公司提供信貸,以及承擔(dān)其他相關(guān)職能的金融機(jī)構(gòu)或政府部 門。 3.2 監(jiān)管當(dāng)局 對(duì)金融機(jī)構(gòu)及其經(jīng)營(yíng)活動(dòng)實(shí)施全面的、經(jīng)常性的檢查和督 促,實(shí)行領(lǐng)導(dǎo)、組織、協(xié)調(diào)和控制,行使實(shí)施監(jiān)督管理職能的政 府機(jī)構(gòu)或準(zhǔn)政府機(jī)構(gòu)。 3.3 銀行 依法設(shè)立的吸收公眾存款、發(fā)放貸款、辦理結(jié)算等業(yè)務(wù)的企 業(yè)法人。 3.4 城市信用合作社 依照有關(guān)規(guī)定在城市市區(qū)內(nèi)由城市居民、個(gè)體工商戶和中小 企業(yè)法人出資設(shè)立的,主要為社員提供服務(wù),具有獨(dú)立企業(yè)法人 資格的合作金融組織。 3.5 農(nóng)村信用合作社 經(jīng)相關(guān)國(guó)家部門批準(zhǔn)設(shè)立,由社員入股組成、實(shí)行社員民主 管理、主要為社員提供金融服務(wù)的農(nóng)村合作金融機(jī)構(gòu)。 3.6 農(nóng)村合作銀行 由轄內(nèi)農(nóng)民、農(nóng)村工商戶、企業(yè)法人和其它經(jīng)濟(jì)組織入股組 成的股份合作制社區(qū)性地方金融機(jī)構(gòu)。 3.7 農(nóng)村商業(yè)銀行 由轄內(nèi)農(nóng)民、農(nóng)村工商戶、企業(yè)法人和其它經(jīng)濟(jì)組織共同發(fā) 起成立的股份制地方性金融機(jī)構(gòu)。 3.8 村鎮(zhèn)銀行 經(jīng)中國(guó)銀行業(yè)監(jiān)督管理委員會(huì)依據(jù)有關(guān)法律、法規(guī)批準(zhǔn),由 境內(nèi)外金融機(jī)構(gòu)、境內(nèi)非金融機(jī)構(gòu)企業(yè)法人、境內(nèi)自然人出資,在農(nóng)村地區(qū)設(shè)立的主要為當(dāng)?shù)剞r(nóng)民、農(nóng)業(yè)和農(nóng)村經(jīng)濟(jì)發(fā)展提供金 融服務(wù)的金融機(jī)構(gòu)。 3.9 農(nóng)村資金互助社 經(jīng)中國(guó)銀行業(yè)監(jiān)督管理機(jī)構(gòu)批準(zhǔn),由鄉(xiāng)(鎮(zhèn))、行政村農(nóng)民 和農(nóng)村小企業(yè)自愿入股組成,為社員提供存款、貸款、結(jié)算等業(yè) 務(wù)的社區(qū)互助性金融機(jī)構(gòu)。 3.10 財(cái)務(wù)公司 以加強(qiáng)企業(yè)集團(tuán)資金集中管理和提高企業(yè)集團(tuán)資金使用效 率為目的,為企業(yè)集團(tuán)成員單位提供財(cái)務(wù)管理服務(wù)的金融機(jī)構(gòu)。 3.11 信托公司 依照《中華人民共和國(guó)公司法》和《信托公司管理辦法》設(shè) 立的主要經(jīng)營(yíng)信托業(yè)務(wù)的金融機(jī)構(gòu)。 3.12 金融資產(chǎn)管理公司 經(jīng)國(guó)務(wù)院決定設(shè)立的,收購(gòu)、管理和處置金融機(jī)構(gòu)、公司及 其他企業(yè)(集團(tuán))不良資產(chǎn),兼營(yíng)金融租賃、投資銀行等業(yè)務(wù)的 金融機(jī)構(gòu)。 3.13 金融租賃公司 經(jīng)中國(guó)銀行業(yè)監(jiān)督管理委員會(huì)批準(zhǔn),以經(jīng)營(yíng)融資租賃業(yè)務(wù)為 主的金融機(jī)構(gòu)。 3.14 汽車金融公司 經(jīng)中國(guó)銀行業(yè)監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立的,為中國(guó)境內(nèi)的汽 車購(gòu)買者及銷售者提供金融服務(wù)的金融機(jī)構(gòu)。 3.15 貸款公司 經(jīng)中國(guó)銀行業(yè)監(jiān)督管理委員會(huì)依據(jù)有關(guān)法律、法規(guī)批準(zhǔn),由 境內(nèi)商業(yè)銀行或農(nóng)村合作銀行在農(nóng)村地區(qū)設(shè)立的專門為縣域農(nóng) 民、農(nóng)業(yè)和農(nóng)村經(jīng)濟(jì)發(fā)展提供貸款服務(wù)的金融機(jī)構(gòu)。 3.16 貨幣經(jīng)紀(jì)公司 經(jīng)中國(guó)銀行業(yè)監(jiān)督管理委員會(huì)批準(zhǔn)在中國(guó)境內(nèi)設(shè)立的,通過 電子技術(shù)或其他手段,專門從事促進(jìn)金融機(jī)構(gòu)間資金融通和外匯 交易等經(jīng)紀(jì)服務(wù),并從中收取傭金的金融機(jī)構(gòu)。 3.17 證券公司 依照《中華人民共和國(guó)公司法》規(guī)定設(shè)立的并經(jīng)國(guó)務(wù)院證券 監(jiān)督管理機(jī)構(gòu)審查批準(zhǔn)而成立的專門經(jīng)營(yíng)證券業(yè)務(wù),具有獨(dú)立法 人地位的金融機(jī)構(gòu)。 3.18 證券投資基金管理公司 經(jīng)中國(guó)證券監(jiān)督管理委員會(huì)批準(zhǔn),在中華人民共和國(guó)境內(nèi)設(shè) 立,從事證券投資基金管理業(yè)務(wù)的企業(yè)法人。 3.19 期貨公司 依照《中華人民共和國(guó)公司法》和《期貨交易管理?xiàng)l例》規(guī) 定設(shè)立的經(jīng)營(yíng)期貨業(yè)務(wù)的金融機(jī)構(gòu)。 3.20 投資咨詢公司 經(jīng)中國(guó)證券監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立,為證券、期貨投資人 或者客戶提供證券、期貨投資分析、預(yù)測(cè)或者建議等直接或者間 接有償咨詢服務(wù)的金融機(jī)構(gòu)。 3.21 財(cái)產(chǎn)保險(xiǎn)公司 經(jīng)中國(guó)保險(xiǎn)監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立,依法登記注冊(cè),從事 經(jīng)營(yíng)財(cái)產(chǎn)損失保險(xiǎn)、責(zé)任保險(xiǎn)、信用保險(xiǎn)、短期健康保險(xiǎn)和意外 傷害保險(xiǎn)等財(cái)產(chǎn)保險(xiǎn)業(yè)務(wù)的保險(xiǎn)公司。 3.22 人身保險(xiǎn)公司 經(jīng)中國(guó)保險(xiǎn)監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立,依法登記注冊(cè),從事 意外傷害保險(xiǎn)、健康保險(xiǎn)、人壽保險(xiǎn)等人身保險(xiǎn)業(yè)務(wù)的保險(xiǎn)公司。5 3.23 再保險(xiǎn)公司 經(jīng)中國(guó)保險(xiǎn)監(jiān)督管理機(jī)構(gòu)批準(zhǔn)設(shè)立,并依法登記注冊(cè)的,專 門從事再保險(xiǎn)業(yè)務(wù)、不直接向投保人簽發(fā)保單的保險(xiǎn)公司。 3.24 保險(xiǎn)資產(chǎn)管理公司 經(jīng)中國(guó)保監(jiān)會(huì)會(huì)同有關(guān)部門批準(zhǔn),依法登記注冊(cè)、受托管理 保險(xiǎn)資金的金融機(jī)構(gòu)。 3.25 保險(xiǎn)經(jīng)紀(jì)公司 經(jīng)中國(guó)保險(xiǎn)監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立,基于投保人的利益,為投保人與保險(xiǎn)人訂立保險(xiǎn)合同提供中介服務(wù),并依法收取傭金 的金融機(jī)構(gòu)。 3.26 保險(xiǎn)代理公司 經(jīng)中國(guó)保險(xiǎn)監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立,根據(jù)保險(xiǎn)公司的委 托,向保險(xiǎn)公司收取代理傭金,并在保險(xiǎn)公司授權(quán)的范圍內(nèi)代為 辦理保險(xiǎn)業(yè)務(wù)的金融機(jī)構(gòu)。 3.27 保險(xiǎn)公估公司 經(jīng)中國(guó)保險(xiǎn)監(jiān)督管理委員會(huì)批準(zhǔn)設(shè)立的,接受保險(xiǎn)當(dāng)事人委 托,專門從事保險(xiǎn)標(biāo)的的評(píng)估、勘驗(yàn)、鑒定、估損、理算等業(yè)務(wù) 的單位。 3.28 企業(yè)年金 指企業(yè)及其職工在依法參加基本養(yǎng)老保險(xiǎn)的基礎(chǔ)上,自愿建 立的補(bǔ)充養(yǎng)老保險(xiǎn)制度。 3.29 交易所 經(jīng)國(guó)家有關(guān)主管部門批準(zhǔn)設(shè)立的,提供證券、商品、期貨等 集中競(jìng)價(jià)交易場(chǎng)所,不以營(yíng)利為目的的法人。 3.30 登記結(jié)算類機(jī)構(gòu) 經(jīng)國(guó)家有關(guān)主管部門批準(zhǔn)設(shè)立的,為金融交易提供集中的登 記、托管與結(jié)算服務(wù),不以營(yíng)利為目的的法人。 3.31 金融控股公司 依據(jù)《中華人民共和國(guó)公司法》設(shè)立,擁有或控制一個(gè)或多 個(gè)金融性公司,并且這些金融性公司凈資產(chǎn)占全部控股公司合并 凈資產(chǎn)的50%以上,所屬的受監(jiān)管實(shí)體應(yīng)是至少明顯地在從事兩 種以上的銀行、證券和保險(xiǎn)業(yè)務(wù)獨(dú)立企業(yè)法人。 3.32 小額貸款公司 由自然人、企業(yè)法人或其他社會(huì)組織依法設(shè)立,不吸收公眾 存款,經(jīng)營(yíng)小額貸款業(yè)務(wù)的有限責(zé)任公司或股份有限公司。4 編碼對(duì)象 本規(guī)范的編碼對(duì)象是中華人民共和國(guó)的貨幣當(dāng)局、監(jiān)管當(dāng)局 及其境內(nèi)外派出機(jī)構(gòu);境內(nèi)銀行、證券、保險(xiǎn)類金融機(jī)構(gòu)的法人 機(jī)構(gòu)及其境內(nèi)外具有經(jīng)營(yíng)許可的分支機(jī)構(gòu);交易結(jié)算類金融機(jī)構(gòu) 及其境內(nèi)分支機(jī)構(gòu);境內(nèi)設(shè)立的金融控股公司;國(guó)外金融機(jī)構(gòu)在 我國(guó)境內(nèi)設(shè)立的具有經(jīng)營(yíng)許可的非法人分支機(jī)構(gòu),中國(guó)人民銀行 認(rèn)定的其他有關(guān)金融機(jī)構(gòu)?!熬硟?nèi)”指中華人民共和國(guó)(不含港、澳、臺(tái)地區(qū))境內(nèi)的地區(qū)。編碼的結(jié)構(gòu)和表示形式 5.1 結(jié)構(gòu) 金融機(jī)構(gòu)編碼是特征組合碼,長(zhǎng)度為十四位,分別為大寫拉 丁字母或阿拉伯?dāng)?shù)字。編碼分為六段,從左至右分別為:一位金 融機(jī)構(gòu)一級(jí)分類碼;一位金融機(jī)構(gòu)二級(jí)分類碼;四位金融機(jī)構(gòu)三 級(jí)分類碼;兩位地區(qū)代碼;五位順序碼;一位校驗(yàn)碼。7 5.1.1 金融機(jī)構(gòu)一級(jí)分類碼 長(zhǎng)度為一位,采用大寫拉丁字母或阿拉伯?dāng)?shù)字編碼,表示金 融機(jī)構(gòu)的一級(jí)分類。 A-貨幣當(dāng)局 B-監(jiān)管當(dāng)局 C-銀行業(yè)存款類金融機(jī)構(gòu) D-銀行業(yè)非存款類金融機(jī)構(gòu) E-證券業(yè)金融機(jī)構(gòu) F-保險(xiǎn)業(yè)金融機(jī)構(gòu) G-交易及結(jié)算類金融機(jī)構(gòu) H-金融控股公司 Z-其他 J~Y(I、O除外),1~9(0除外)-預(yù)留 5.1.2 金融機(jī)構(gòu)二級(jí)分類碼 長(zhǎng)度為一位,采用阿拉伯?dāng)?shù)字編碼在同一一級(jí)分類內(nèi)按順序 編碼,表示金融機(jī)構(gòu)的二級(jí)分類。 A-貨幣當(dāng)局 1-中國(guó)人民銀行 2-國(guó)家外匯管理局 B-監(jiān)管當(dāng)局 1-中國(guó)銀行業(yè)監(jiān)督管理委員會(huì) 2-中國(guó)證券監(jiān)督管理委員會(huì) 3-中國(guó)保險(xiǎn)監(jiān)督管理委員會(huì) C-銀行業(yè)存款類金融機(jī)構(gòu) 1-銀行 2-城市信用合作社(含聯(lián)社) 3-農(nóng)村信用合作社(含聯(lián)社) 4-農(nóng)村資金互助社 5-財(cái)務(wù)公司 D-銀行業(yè)非存款類金融機(jī)構(gòu) 1-信托公司 2-金融資產(chǎn)管理公司 3-金融租賃公司 4-汽車金融公司 5-貸款公司 6-貨幣經(jīng)紀(jì)公司 E-證券業(yè)金融機(jī)構(gòu) 1-證券公司 2-證券投資基金管理公司 3-期貨公司 4-投資咨詢公司 F-保險(xiǎn)業(yè)金融機(jī)構(gòu) 1-財(cái)產(chǎn)保險(xiǎn)公司 2-人身保險(xiǎn)公司 3-再保險(xiǎn)公司 4-保險(xiǎn)資產(chǎn)管理公司 5-保險(xiǎn)經(jīng)紀(jì)公司 6-保險(xiǎn)代理公司 7-保險(xiǎn)公估公司 8-企業(yè)年金 G-交易及結(jié)算類金融機(jī)構(gòu) 1-交易所 2-登記結(jié)算類機(jī)構(gòu) H-金融控股公司 1-中央金融控股公司 2-其他金融控股公司 Z-其他 1-小額貸款公司 5.1.3 金融機(jī)構(gòu)三級(jí)分碼 長(zhǎng)度為四位,采用阿拉伯?dāng)?shù)字0001~9999在同一二級(jí)分類內(nèi) 按順序編碼,表示金融機(jī)構(gòu)的三級(jí)分類,三級(jí)分類指境內(nèi)單家法 人金融機(jī)構(gòu)或境外金融機(jī)構(gòu)直接在境內(nèi)設(shè)立的不具備法人資格 的機(jī)構(gòu)。 5.1.4 地區(qū)代碼 長(zhǎng)度為兩位,采用拉丁字母和阿拉伯?dāng)?shù)字編碼,表示金融機(jī) 構(gòu)所在地區(qū)的代碼。 按金融機(jī)構(gòu)所在地不同,分別按照如下兩種方式賦碼: ——當(dāng)為境內(nèi)金融機(jī)構(gòu)時(shí),采用《GB/T 2260-2007 中華人 民共和國(guó)行政區(qū)劃代碼》,取其數(shù)字碼前兩位為金融機(jī)構(gòu)所屬省、自治區(qū)、直轄市代碼。 ——當(dāng)為境外金融機(jī)構(gòu)時(shí),采用《GB/T 2659-2000 世界各 國(guó)和地區(qū)名稱代碼(eqv ISO 3166-1:1997)》,取其兩字符拉 丁字母代碼為金融機(jī)構(gòu)屬地國(guó)家或地區(qū)的代碼。(臺(tái)灣、香港、澳門視為境外) 5.1.5 順序碼 長(zhǎng)度為五位,采用阿拉伯?dāng)?shù)字編碼,表示金融機(jī)構(gòu)的順序號(hào)。同一金融機(jī)構(gòu)(三級(jí))分類、同一地區(qū)代碼下,多個(gè)不同營(yíng) 業(yè)機(jī)構(gòu)的順序編號(hào)從00001-99999順序連續(xù)編碼。 5.1.6 校驗(yàn)碼 長(zhǎng)度為一位,采用阿拉伯?dāng)?shù)字編碼,使用The Luhn Mod-10Method算法生成。 5.2 編碼的表示形式 金融機(jī)構(gòu)編碼的各段依次連接,不留空格,其表示形式如下。位置***1314 編碼 XXXXXXXXXXXXXX 碼段 一 二 三四五六 其中:各碼段的含義如下。 一:金融機(jī)構(gòu)一級(jí)分類碼 二:金融機(jī)構(gòu)二級(jí)分類碼 三:金融機(jī)構(gòu)三級(jí)分類碼 四:地區(qū)代碼 五:順序碼 六:校驗(yàn)碼 Java包的名字都是由小寫單詞組成。但是由于Java面向?qū)ο缶幊痰奶匦?,每一名Java程序員都可以編寫屬于自己的Java包,為了保障每個(gè)Java包命名的唯一性,在最新的Java編程規(guī)范中,要求程序員在自己定義的包的名稱之前加上唯一的前綴。由于互聯(lián)網(wǎng)上的域名稱是不會(huì)重復(fù)的,所以程序員一般采用自己在互聯(lián)網(wǎng)上的域名稱作為自己程序包的唯一前綴。例如: net.frontfree.javagroup 類的名字必須由大寫字母開頭而單詞中的其他字母均為小寫;如果類名稱由多個(gè)單詞組成,則每個(gè)單詞的首字母均應(yīng)為大寫例如TestPage;如果類名稱中包含單詞縮寫,則這個(gè)所寫詞的每個(gè)字母均應(yīng)大寫,如:XMLExample,還有一點(diǎn)命名技巧就是由于類是設(shè)計(jì)用來代表對(duì)象的,所以在命名類時(shí)應(yīng)盡量選擇名詞。 例如: Circle interface RasterDelegate; interface Storing; 方法的名字的第一個(gè)單詞應(yīng)以小寫字母作為開頭,后面的單詞則用大寫字母開頭。例如: sendMessge 變量(Variables)除了變量名外,所有實(shí)例,包括類,類常量,均采用大小寫混合的方式,第一個(gè)單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號(hào)開頭,盡管這在語法上是允許的。 變量名應(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)大小寫規(guī)則和變量名相似,除了前面需要一個(gè)下劃線 int _employeeId; String _name; Customer _customer; 常量的名字應(yīng)該都使用大寫字母,并且指出該常量完整含義。如果一個(gè)常量名稱由多個(gè)單詞組成,則應(yīng)該用下劃線來分割這些單詞。 例如: MAX_VALUE 1、編寫目的 使用統(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)目開發(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 表空間 ? 面向用戶的專用數(shù)據(jù)表空間以用戶名+_+data命名,如Aud用戶專用數(shù)據(jù)表空間可命名為Aud_data ? 面向用戶的專用索引表空間以用戶名+_+idx命名 ? 面向用戶的專用臨時(shí)表空間以用戶名+_+tmp命名 ? 面向用戶的專用回滾段表空間以用戶名+_+rbs命名 ? 面向應(yīng)用的表空間以應(yīng)用名+_data/應(yīng)用名+_idx/應(yīng)用名+_tmp/應(yīng)用名+_rbs命名 ? LOB段數(shù)據(jù)專用表空間以其數(shù)據(jù)表空間+_+lobs命名,如上例中數(shù)據(jù)表空間為Aud_data,則LOB段表空間可命名為Aud_data_lobs 3.2.2 表空間文件 表空間文件命名以表空間名+兩位數(shù)序號(hào)(序號(hào)從01開始)組成,如Aud_data01等 3.2.3 表 表命名要遵循以下原則: ? 一般表采用“系統(tǒng)名+t_+模塊名+_+表義名” 格式構(gòu)成 ? 若數(shù)據(jù)庫(kù)中只含有單個(gè)模塊,命名可采用“系統(tǒng)名+t_+表義名”格式構(gòu)成 ? 模塊名或表義名均以其漢語拼音的首字符命名,表義名中漢語拼音均采用小寫,且字符間不加分割符; ? 表別名命名規(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的縮寫,表A和表B均采用其表義名或縮寫形式。 3.2.4 屬性(列或字段)屬性命名遵循以下原則: ? 采用有意義的列名,為實(shí)際含義的漢語拼音的首字符,且字符間不加任何分割符 ? 屬性名前不要加表名等作為前綴 ? 屬性后不加任何類型標(biāo)識(shí)作為后綴 ? 不要使用“ID”作為列名 ? 關(guān)聯(lián)字段命名以 “cd+_+關(guān)聯(lián)表的表義名(或縮寫)+_+字段名”進(jìn)行 3.2.5 主鍵 ? 任何表都必須定義主鍵 ? 表主鍵命名為:“pk+_+表名(或縮寫)+_+主鍵標(biāo)識(shí)” 如“pk_YHXX_IDKH”等 3.2.6 外鍵 表外鍵命名為: “fk+_+表名(或縮寫)+_主表名(或縮寫)+_+主鍵標(biāo)識(shí)” 如“fk_YHLX_YHXX_SFZH”等 3.2.7 CHECK約束 CHECK約束命名為: “chk+_+CHECK約束的列名(或縮寫)” 3.2.8 UNIQUE約束 UNIQUE約束命名為: “unq+_+UNIQUE約束的列名(或縮寫)” 3.2.9 索引 索引的命名為:“表名(或縮寫)+_+列名+_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] ? 各種類型的觸發(fā)器中 i,u,d分別表示insert、update和delete 行級(jí)觸發(fā)器,后加_row標(biāo)識(shí),語句級(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ī)則和表的命名類似 3.4 序列 序列命名以seq_+含義名組成 3.5 同義詞 同義詞命名與其基礎(chǔ)對(duì)象的名稱一致,但要去除其用戶前綴或含有遠(yuǎn)程數(shù)據(jù)庫(kù)鏈接的后綴 3.6 存儲(chǔ)對(duì)象相關(guān) 3.6.1 存儲(chǔ)過程 存儲(chǔ)過程命名由“系統(tǒng)名+sp+_+存儲(chǔ)過程標(biāo)識(shí)(縮寫)”組成 存儲(chǔ)過程標(biāo)識(shí)要以實(shí)際含義的漢語拼音的首字符構(gòu)成,并用下劃線分割各個(gè)組成部分。如增加代理商的帳戶的存儲(chǔ)過程為“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)+_+名稱”形式,前綴i或o表輸入還是輸出參數(shù) ? 過程變量命名采用“l(fā)+_+名稱”形式 ? 全局包變量命名采用“g+_+名稱”形式 ? 游標(biāo)變量命名采用“名稱+_+cur”形式 ? 常量型變量命名采用“c+_+名稱”形式 ? 變量名采用小寫,若屬于詞組形式,用下劃線分隔每個(gè)單詞 ? 變量用來存放表中的列或行數(shù)據(jù)值時(shí),使用%TYPE、%ROWTYPE方式聲明變量,使變量聲明的類型與表中的保持同步,隨表的變化而變化 3.7 用戶及角色 ? 用戶命名由“系統(tǒng)名稱+_+user+_+名詞(或縮寫)或名詞短語(或縮寫)”組成 ? 角色命名由“系統(tǒng)名稱+_+role+_+名詞(或縮寫)或名詞短語(或縮寫)”組成 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) ? 命名都不得超過30個(gè)字符。? 不要在對(duì)象名的字符之間留空格 ? 小心保留詞,要保證你的命名沒有和保留詞、數(shù)據(jù)庫(kù)系統(tǒng)或者常用訪問方法沖突 4、編碼規(guī)范 4.1 一般性注釋 4.1.1 注釋盡可能簡(jiǎn)潔、詳細(xì)而全面 4.1.2 創(chuàng)建每一數(shù)據(jù)庫(kù)對(duì)象時(shí)都要加上COMMENT ON注釋,以說明該對(duì)象的功能和用途;建表時(shí),對(duì)某些數(shù)據(jù)列也要加上COMMENT ON注釋,以說明該列和/或列取值的含義。如:XX表中有CZZT列屬性為NUMBER(10, 0)可加COMMENT ON注釋如下 COMMENT ON COLUMN XX.CZZT IS '0 = 正常, 1 = 等待, 2 = 超時(shí), 3 = 登出' 4.1.3 注釋語法包含兩種情況:?jiǎn)涡凶⑨?、多行注?單行注釋:注釋前有兩個(gè)連字符(--),一般對(duì)變量、條件子句可以采用該類注釋。多行注釋:符號(hào)之間的內(nèi)容為注釋內(nèi)容。對(duì)某項(xiàng)完整的操作建議使用該類注釋。4.2 函數(shù)文本注釋 4.2.1 在每一個(gè)塊和過程(存儲(chǔ)過程、函數(shù)、包、觸發(fā)器、視圖等)的開頭放置注釋 CREATE [OR REPLACE] PROCEDURE dfsp_xxx ? 4.2.2 傳入?yún)?shù)的含義應(yīng)該有所說明。如果取值范圍確定,也應(yīng)該一并說明。取值有特定含義的變量(如boolean類型變量),應(yīng)給出每個(gè)值的含義。 4.2.3 在每一個(gè)變量聲明的旁邊添加注釋。說明該變量要用作什么 通常,簡(jiǎn)單使用單行注釋就行了,例如 l_sfzh CHAR(11) --身份證號(hào)碼 4.2.4 在塊的每個(gè)主要部分之前添加注釋 在塊的每個(gè)主要部分之前增加注釋,解釋下—組語句目的,最好是說明該段語句及算法的目的以及要得到的結(jié)果,但不要對(duì)其細(xì)節(jié)進(jìn)行過多的描述 4.2.5 在塊和過程的開頭注釋中還可以增加要訪問的數(shù)據(jù)庫(kù)等信息 4.3 常用SQL語句的編寫規(guī)范 4.3.1 CREATE語句 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語句 查詢語句采用以下原則編寫(可最大化重用共享池中的SQL語句,提高應(yīng)用程序性能): ? 將SELECT語句分為5部分:(1)由SELECT開頭,后跟一個(gè)顯示查詢結(jié)果的列表; (2)由FROM開頭,后跟一個(gè)或多個(gè)獲取數(shù)據(jù)所涉及的表;(3)由WHERE開頭,后跟一個(gè)或多個(gè)確定所需值的條件; (4)由GROUP BY開頭,后跟一個(gè)或多個(gè)表列名,通過這些列以對(duì)查詢結(jié)果進(jìn)行匯總;(5)由ORDER BY開頭,后跟一個(gè)或多個(gè)表列名,通過這些列以對(duì)查詢結(jié)果進(jìn)行排序。? 每個(gè)部分分行編寫,將每一行的第一個(gè)關(guān)鍵字與第一行的SELECT尾部對(duì)齊,如 SELECT col1, col2, col3 FROM table1 WHERE col1 > col2 GROUP BY col1, col2 ORDER BY col1;? 關(guān)鍵字用大寫,列名和表名采用小寫 ? 語句中嵌入逗號(hào)時(shí),在逗號(hào)后面加一空格,當(dāng)逗號(hào)是最后一個(gè)字符時(shí),把它放在本行 ? 當(dāng)語句的同一部分要延續(xù)到下一行時(shí),按下列格式排列: SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10 ? 將語句中WHERE和AND部分格式化,書寫布局類似于 WHERE AND AND ? 當(dāng)語句中出現(xiàn)括號(hào)時(shí),括號(hào)的兩邊不留空格 ? 在SQL語句使用運(yùn)算符時(shí),操作兩邊應(yīng)各留一個(gè)空格,如 WHERE X = Y AND A = B AND C = D 4.3.3 INSERT語句 INSERT INTO <要插入的表名> (<列1>, <列2>,.., <列n-1>, <列n>) VALUES (<列1值>, <列2值>,.., <列n-1值>, <列n值>)4.3.4 UPDATE語句 UPDATE <要更新的表名> SET <要更新的列> = <列值> 4.3.5 DELETE語句 DELETE FROM table1 WHERE col1 = '???' 4.4 條件執(zhí)行語句(IF)編寫規(guī)范 條件執(zhí)行語句IF?ELSE按以下格式編寫 IF <條件表達(dá)式> THEN <一條或多條語句> [ELSE(或ELSIF<條件表達(dá)式>)THEN <一條或多條語句> END IF;注:(1) 在IF?THEN和ELSE(或ELSIF)及ELSE?THEN和END IF間可包含一條或多條PL/SQL語句,而不需要加BEGIN和END(2) IF?ELSE?ENDIF語句可以嵌套(3) 注意ELSIF的寫法 4.5 循環(huán)語句編寫規(guī)范 4.5.1 簡(jiǎn)單循環(huán)語句 LOOP <零條或多條語句> EXIT WHEN <條件表達(dá)式> <零條或多條語句> END LOOP;4.5.2 FOR循環(huán)語句 FOR 變量 IN [變量取值范圍] LOOP <一條或多條語句> END LOOP;4.5.3 WHILE循環(huán)語句 WHILE <條件表達(dá)式> LOOP <一條或多條語句> END LOOP;4.6 函數(shù)文本(存儲(chǔ)過程、函數(shù)和包等) ? 對(duì)于存儲(chǔ)過程、函數(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;第三篇:金融機(jī)構(gòu)編碼規(guī)范
第四篇:Java命名規(guī)范
第五篇:oracle命名規(guī)范