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