1. 程式人生 > >C#OOP之十六 開發常用之各種規範參考

C#OOP之十六 開發常用之各種規範參考

附錄一.Windows控制元件縮寫規範

資料型別

資料型別簡寫

標準命名

Lable

Lbl

LblMessage

LinkLable

llbl

LlblToday

Button

btn

Btnsave

TextBox

Txt

TxtName

MainMenu

mmnu

MnnuFile

CheckBox

chk

chkStock

RadioButton

rbtn

RbtnSelected

GroupBox

gbx

GbxMain

pictureBox

pic

PicImage

Panel

pnl

PnlBod

DataGrid

dgrd

DgrdView

ListBox

cbo

CboMenu

TreeView

tvw

Tvw

TabControl

tctl

tctlSelected

DataTimePicker

dtp

dtpStartData

HscrollBar

hsb

hsbImage

VscrollBar

vxb

vsbImage

Timer

tmr

tmrCount

ImageList

ilst

ilstImage

ToolBar

Tlb

tlbManage

StatusBar

stb

stbFootPrint

OpenFileDialog

odlg

odlgFile

SaveFileDialog

sdlg

sdlgSave

FoldBrowserDialog

fbdlg

fgdlgBrwser

FontDialog

fdlg

fdlgFoot

ColorDialog

cdlg

cdlgColr

PrintDialog

pdlg

pdlgPrints

Web控制元件縮寫規範

 

資料型別

資料型別簡寫

標準命名

AdRotator

Asrt

Example

Button

Btn

BtnSubimit

Calendar

Cal

calMettingDatas

CheckBox

Chk

ChkBlue

CheckBoxList

Chkl

chkFavClors

CompareValidator

Valx

valxDBCheck

DataGrid

Dgrd

DgrdTitles

DataList

Dlst

DlstTitle

DropdownList

Drop

dropCountries

HyperLink

Lnk

LnkDetail

Image

img

ImgAuntBetty

ImageButton

ibtn

IbtnSubmit

Label

Lbl

LblResult

LinkButton

lbtn

LbtnSubmit

ListBox

Lst

LstCountries

Panel

pnl

pnlForm2

PlaceHolder

Plh

PlhFormContens

RadioButton

Rad

RadFemale

RadioButtonList

radl

RadlGer

RangValidator

valg

ValgAge

Regular Expression

vale

valeEmail  Vaildator

Repeater

Rpt

ValrFirstName

Table

Tbl

TblCountryCodes

TableCell

tblc

TblcGermany

TableRow

tblr

TblrCountry

TextBox

Txt

TxtFirstName

ValidationSummary

vals

valsFormError

XML

xmlc

XmlcTranformResults

資料庫物件縮寫規範

 

資料型別

資料型別簡寫

標準命名舉例

Connection

Con

ConNorthwind

Command

Cmd

CmdReturnProducts

Parameter

Parm

ParmProductID

DataAdapter

Dap

DapProducts

DataReater

Dtr

DtrProducts

DataSet

Ds

DsNorthWind

DataTable

Dt

DtProduct

DataRow

Drow

DrowRow

DataColumn

Dcol

DcolProductID

DataRelation

drl

DrlMasterDetail

DataView

dvw

DvwFilteredProducts

資料型別寫規範

 

資料型別

資料型別簡寫

標準命名舉例

Bool

b/is

IsVisable

Float

F

FPrice

Double

D

DPrice

Unit

U

Uage

Int

I

iNumber

Char

Ch

ChCode

Byte

Bt

BtImages

String

Str

StrName

Struct

St

stStudents

Windows

Wnd

WndMain

AttayList

Lst

LstStudents

Array

Arr

ArrStudents

Hashtable

Ht

HtStudents

常用型別命名規範總結

 

型別

命名規範

注意事項

事例

類或結構

Pascal

首字元大寫

HttpContext

介面

Pascal

加字首 I

IdataAdapter

列舉名

Pascal

首字元大寫

CommandType

列舉值

Pascal

首字元大寫

CommandType.Text

事件

Pascal

首字元大寫

SelectedINdexChanged

自定義異常

Pascal

加字尾Exception

ArgumentException

公共欄位

Pascal

首字元大寫

Int32.MaxValue

方法

Pascal

首字元大寫

ToString

名稱空間

Pascal

首字元大寫

System.Xml

屬性

Pascal

首字元大寫

BackColor

保護或私有欄位

Camel

首字元小寫

MyVariable

引數

Camel

首字元小寫

cmdText

附錄二.命名規範

一.類

1.1..使用Pascal規則命名類名,即首字母要大些.。

如:

Class person

ClassBmpFileStream

1.2.使用能夠反映類功能的名詞或名詞短語命名類。

   如:

public classFileStream

public class Button

public classstring

1.3.不要使用“_”,”C”,”I”等特定含義字首。

   如:

class –ManagerSystem

classCManagerSystem

classImanagerSystem

1.4.自定義異常類應以Exception結尾。

  如:

   Public class EmailException:Exception

   {

   //類體

}

1.5.檔名要能反映類的內容,最好是和類同名。

二、類欄位

 2.1.用camel規則來命名類成員變數名稱,即首單詞(或單詞縮寫)小寫。

    如:

class Student

{

string stuName;

string stuNo;

string password;

}

2.2.類欄位變數名前加”_”字首。

如:

Class student

{

String_stuName;

String _stuNo;

}

 2.3堅決在普通變數前加”m_”字首(這是VC老命名規則)。

如:

Class Student

{

    sting m_stuName;

   sting m_stuNo;

}

三. 方法

  3.1方法採用Pascal規則,第一個字元要大寫。

如:

  public void DoubleVaule(){…}

  public void Show(){…}

3.2方法名應使用動詞或動詞短語。

如:

  void RemoveAll(){…}

  void GetCharArray(){…}

  void Invoke()

3.3類中訪問修飾符或者功能相同的方法應該放在一起,且公共或實現介面的方法在前。

 如:

Class Test

{

    public void Invoke(){…}

    public void Insert(){…}

    private void RemoveAll(){…}

    private void GetCharArray(){…}

}   

四.屬性

 4.1使用名詞定義屬性,屬性使用Pascal規則,首字元大寫。

如: 

 public class Book

     {

        public Color BookName

         {

   //屬性程式碼

}

4.2屬性和相應欄位名稱要關聯,可以使用”重構”選單來生成屬性.

   如:

      publicclass Book

{

private string bookName;

public Color BookName

{

                     Get{returnbookName;}

}

}

五.引數

5.1引數採用camel規則命名,首字元小寫。

     如:

       String Format(string format,object[] args){…}

5.2使用描述性引數名稱,引數名稱應當具有足夠的說明性。

5.3不要給引數加匈牙利型別表示法的字首。

    如下面是不合理的:

             voidInsert(string sName,string strAddress)

應該為:

            void Insert(stringname,string address)

5.4檢查方法所有輸入引數的有效性。

六.常量

6.1只讀常量使用Pascal命名規則,即首字母大寫。

如:

class Calendar

{

          public readonlyColor RedColor;

          public constTuesday;

}

6.2列舉命名使用Pascal規則命名,列舉成員本質屬於常量,命名規則同上。

 如:

     enum  CarColor { Red , Blue , Yellow }

6.3列舉值從小到大順序定義。

如:

 enumCarColor

{

          Red = 1;

          Blue= 2;

          Yellow = 3;

}

6.4靜態欄位或屬性採用Pascal規則,首字元大寫。

       public class Component:IComponent

       {

        static string typeName;

        public static string TypeName{get;set}

}

七.介面

7.1介面定義使用Pascal規則,且必須以大寫”I”開頭。

     public interfaceIDatePort

     public interfaceIFormatable

7.2介面名稱要有意義,中間不要有下劃線”_”等字串。

    如:  

     interface I_Date_Port 是不合適的。

7.3如果類實現了介面,名稱儘量和介面相同,只是省掉”I”字元。

 public interface IComponent

{

  //介面定義

}

public classComponent: IComponent

{

      //類實現

}

八.事件

8.1委託名稱採用Pascal規則,第一個字元大寫。

    如:

      public delegate voidCountHandler(int x,int y);

8.2定義事件的委託要使用EventHandler字尾,且包括sender和e兩個引數。

如:

Delegate voidMouseEventHandler(object sender,MouseEventArgs e) ;

8.3事件用到的引數類,名稱要帶EventArgs字尾。

如:

public classMouseEventArgs:EventArgs

{

             //引數類內容

}

九.名稱空間

9.1名稱空間名稱採用Pascal規則,首字元大寫。

如:

NamespaceHairCompany

{

  //名稱空間內容

}

9.3名稱空間名稱儘量反映其內容所提供的整體功能。

如:

Microsoft.Media

Microsoft.Media.Design

附錄三.註釋規範

一.檔案頭部註釋

1.1 檔案都包含檔案頭,要說明檔名、作者、建立時間、變更記錄等。

 如:

/***********************

*檔名:CarPrint.cs

*作者:趙建磊

*建立日期:2010-05-23

*描述:完成列印功能

*修改日期:2009-11-23

*Email:[email protected]

***********************/

1.2推薦採用.NET形式書寫頭部註釋。

如:

///<summary>

///檔名:CarPrint.cs

///作者:趙建磊

///建立日期:2010-05-23

///描述:完成列印功能

///修改日期:2009-4-23

///Email:[email protected]

///</summary>

二.類及其成員註釋

2.1對方法和類使用”///”三斜線註釋。

如:

///<summary>

///功能:對此類功能的描述

///作者:作者中文名

///日期:編寫日期等

///描述:完成列印功能

///修改日期:2009-11-23

///</summary>

ClassBookSystem

{

    ///<summary>

///圖書詳細資訊查詢

///</summary>

Public DataSetSelectBooks(int id)

{

}

}

2.2.程式碼行文註釋採用”//”和”/**/”進行,應量說明問題。

 PublicDataSet SelectBooks(int id /*書籍ID*/)

{

  DataSet dsBook;//註釋資料集

}

2.3新增的註釋必須能夠說明此語句塊的作用和實現手段。

2.4所有的註釋都應該用英文或者中文,同一段註釋不要混用兩種語言。

2.5程式碼變更需要將舊程式碼註釋,並且說說明變更原因、變更作者和變更時間。

附錄四.行文規範

                             不可按外貌斷定是非,要按公平斷定是非。

                                                    -----《新約》(john)

版面

儘管在定義程式碼樣式的格式時,你可以做出很多個性化的選擇,但所有這些都是關於審美的。從定義上看,樣式沒有任何句法或語義上的意義;編譯器會忽略樣式。然而原始碼的真正讀者是其他程式設計師。編寫程式碼時要為他們的利益著想。

u   K&R括號風格

K&R風格是最早為人們所喜愛的風格,它是由C語言之父Kernighan和Ritchie在他們的《C程式設計語言》一書中確立的。由於這個原因,這種風格常被認為是最初和最好的風格。它的誕生來源於在一個小螢幕中顯示儘可能多的資訊的需求。

int k_and_r( ) {

  int a = 0, b = 0;

  while (a != 10) {

              b++;

              a++;

}

return b;

}

優點

l       佔用空間較小,所以在一屏上一次可以顯示更多的程式碼

l       後括號與相對應的語句縮排相同,所以可以很容易地找到括號所終止的構造

缺點

l       前括號和後括號上下不對齊,所以視覺上不易匹配

l       如果頁面右側的前括號丟失,將很難發現

l       程式碼語句看上去擠作一團

u   Allman括號風格

Allman括號風格是一種空間上更開闊的方法。這也是C#語言在國內最流行的風格。

Int exdented( )

{

      Int a = 0,b = 0;

      While (a != 10)

{

             b++;

             a++;

}

Return b;

}

優點

l       格式清晰整潔

l       每個程式碼塊都更易於區分

缺點

l       佔用的豎向空間更多

l       如果你有很多隻包含一條語句的程式碼塊,那麼會顯得很浪費空間

l       對某些黑客而言這太像Pascal語句了

縮寫規範

l       識別符號應當直觀可望文知意,不提倡使用任何縮寫。

l       字串變數推薦以“str”或“s”開頭,採用string.Empty來初始化。

    如:

    String strName = string.Empty;

l       普通物件可以以“obj”開頭。

    如:

    Book objBook=new Book( );

l       縮寫可自行定義,一般取單詞的前/後字元組成,以含義直觀為準則。

合理名稱如:

Label lblName;

Lable lbName;

Color bkColor;

ColorbackgroudColor;

Color bgColor;

l       一般情況下不要讓縮寫破壞識別符號的含義。

如:

Public StudentGetStudent( )

排版

l       每行語句至少佔一行,如果語句過(超過一屏),則語句斷為兩行顯示。

如:

Public void Insert(string bookName,

String bokID,

String bookDetail,

Int bookNumber

);

下列定義不合理:

frmMain.Width = 0;frmMain.Height=0;

應為:

frmMain.Width = 0;

frmMain.Height=0;

l       把相似的內容放在一起,比如欄位、屬性、方法、事件等,使用“#region”命令分組。

如:

Class Book

{

       #region構造方法

              PublicBook(string name) {…}

       #endregion

       #region公共方法

              PublicBook GetBookByName(string name) {…}

       #endregion

       #region屬性

              Publicstring Name{…}

       #endregion

       #region私有欄位

              Privatestring name;

#endregion

}

l       多個程式元素進行對等操作時,操作符之前、之後或者前後要加空格。

如:

If (!ValidNi(ni))

{

       //程式程式碼

}

nRepssnInd = SsnData[index].nRepssnIndex;

nRepssnNi = SsnData[index].ni;

l       每個方法的源程式行數原則上應該少於200行。

l       語句巢狀層次不得超過3層。

l       避免相同的程式碼段在多個地方出現。

語句結構

l       如果使用了異常結構,一定要處理異常,一般是要寫日誌檔案。

如:

try

{

      //異常監控程式碼

}

Catch(Exception e)

{

      Log.WriteLine(e.Messge);

}

l       分支語句不應該使用複雜長條件。

如:

If(txtName ==null || txtName == string.Empty)

{

      //處理程式碼

}

應該將長條件封裝成方法:

if(txtNameEnable( )) {…}

switch語句,case後面必須接break(這一點C#已經強行限制)。

l       禁止使用goto語句進行跳轉。

l       行文中嚴禁出現“魔數”,特定含義的常數必須定義成列舉或常量。

如:

if( objCar.Type==1) objCar.Run( );

應為:

if(objCar.Type==Cars.BMP)objCar.Run( );

l       不同型別的操作符混合使用時,使用括號給出優先順序。

如:

if( year % 4 == 0|| year % 100 != 0 && year % 400 == 0)

應為:

If((year % 4) == 0 ||((year % 100) != 0 && (year % 400) == 0 ))

l       不允許使用複雜的操作符組合。

如:

maxVal = ((a>b ? a:b) > ? (a>b ? a : b) : c);

應該為:

temp = (a>b ? a : b);

maxVal = ( iTemp > b ? iTemp : b);

l       迴圈、判斷語句的程式塊部分用花括號括起來,即使只有一條語句。

如:

if(condition)

     flag = true;

推薦改為:

if(condition )

{

     flag = true;

}

l       在switch語句中總是要有default子句,建議使用斷言。

CarType type = GetType( );

Switch (type)

{

     case CarType.GMC:

            return new GMCCar();

            break;

     case CarType.BMW:

            return new BMWCar();

            break;

     default:

            Debug.Assert(false);

            break:

}

l       每個類和方法完成單一的功能,不設計多用途面面俱到的類和方法。

l       嚴禁使用未經初始化的變數,變數通常使用構造方法來初始化。

大小寫

l       不要建立名稱相同,但大小寫區別的任何元素。

如:

Void MyFunction(string a, string A)

int Color {get, set}

int CoLor{get,set}

l       應當大寫僅有兩個字元的縮寫。

如:

string stuID;

l       不要把易混淆的數字和字母放在一起。

如:

string r = (lo == 10) ? (I1 == 11) : (lol != 101);

l       使用英文命名識別符號。

l       不允許變數名、類名、屬性名、方法名等與系統識別符號重名。

SQL編碼規範

l       SQL語句全部大寫。

如:

SELECT psnNameFROM person

CREATE PROC p_Selectproc

l        對較複雜的SQL語句加上註釋,說明其功能。

l        連線符OR、IN、AND、以及=、<=、>=等前後加上一個空格。

l        使用明確的列代替SELECT*。

如:

SELECT  A.ID, A.NAME, B.ID, B.NAME

FROM  CLASS A, PERSON B

WHERE  A.ID = B.ID

AND A.GRADE = ‘5’

軟體架構

l        資料庫中每一張表對應一個實體類/所據傳輸物件(DTO)。

l        實體類名稱使用表名,也可帶有Dto字尾。

如:

classpersonDto

{

    Public String Nme

    {

    get{return name;}

    get{this.name = value;}

}

}

l        三層架構應當合理使用,不應生搬硬套。

三層架構元素推薦字尾:

資料傳輸物件 XxxxDto

DAO工廠    XxxDAOFactory

DAO介面    IXxxxDAO

服務介面     IXxxxService

DAO的資料庫實現  XxxxDAOOracle/XxxxDAOInfomix

業務邏輯     XxxxManger

系統

l        在國內不要隨便使用設計模式等程式碼模式,因為並不流行。

l        系統輸入、資源操作、(如記憶體分配、檔案及目錄操作)、網路操作(如通訊、呼叫等)、任務之間的操作(如通訊、呼叫等)時必須進行錯誤、超時或異常處理。

l      模組編寫應該有完善的測試方面的考慮。   

相關推薦

C#OOP 開發常用各種規範參考

附錄一.Windows控制元件縮寫規範資料型別資料型別簡寫標準命名LableLblLblMessageLinkLablellblLlblTodayButtonbtnBtnsaveTextBoxTxtTxtNameMainMenummnuMnnuFileCheckBoxchkc

C#設計模式觀察者模式(Observer Pattern)【行為型】

ngx 現實生活 松耦合 mon html 機制 account current 很好 原文:C#設計模式之十六觀察者模式(Observer Pattern)【行為型】一、引言 今天是2017年11月份的最後一天,也就是2017年11月30日,利用今天再寫一個模式,爭取

常見設計模式的解析和實現(C++)-Strategy模式

作用:定義一系列的演算法,把它們一個個封裝起來, 並且使它們可相互替換.本模式使得演算法可獨立於使用它的客戶而變化.UML結構圖:解析:簡而言之一句話,Strategy模式是對演算法的封裝.處理一個問題的時候可能有多種演算法,這些演算法的介面(輸入引數,輸出引數等)都是一致的,那麼可以考慮採用Stra

C語言,進位制轉換進位制轉二進位制,完整程式碼

#include "iostream" using namespace std; #define MAX 50 int main()//十六轉二 { int elem2[MAX]; char elem16[MAX]; cout <

VS2013/MFC程式設計入門常用控制元件:圖片控制元件Picture Control)

本節主要講一種簡單實用的控制元件,圖片控制元件Picture Control。通過使用圖片控制元件我們可以在介面某個位置顯示圖片以美化介面。        圖片控制元件簡介        圖片控制元件和前面講到的靜態文字框都是靜態文字控制元件,因此兩者的使用方法有很多

獻給初學iOS的小盆友們——微博app專案開發搭建傳送微博介面(上)

從這節課開始我們學習搭建傳送微博介面。傳送介面看起來簡單,但是卻包含了許多細節處理。所以我們分為幾節課來完成,儘量講解詳細點。 本節內容 本節程式碼資料 16.1 設定傳送介面的導航內容 當我們點選中間加號按鈕的時候,微博會彈出一個傳送介面,

C++ primer 第二章筆記 動態內存

weak memory ont 創建 tor size prim 自動 pre 動態內存: 運算符:new,delete 智能指針: 頭文件:memory shared_ptr:允許多個指針指向同一個對象; unique_ptr:"獨占"所指向的對象; weak_ptr:

轉:【Java並發編程】:深入Java內存模型——happen-before規則及其對DCL的分析(含代碼)

無需 bit 對象引用 說了 final 緩存 機器 通過 round 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17348313 happen—before規則介紹 Java語言中有一個“先行發生

ElasticStack系列 & ElasticSearch5.x index/create 和 update 源碼分析

elastics quest 流程圖 刪除 context pre brush 什麽 log 開篇   在ElasticSearch 系列十四中提到的問題即 ElasticStack系列之十四 & ElasticSearch5.x bulk update 中重復 i

)Centos安裝mysql

sqlyog str conn blog roo 臨時 mysql5.7 測試 mysql- 第一步:獲取mysql YUM源 進入mysql官網獲取RPM包下載地址 https://dev.mysql.com/downloads/repo/yum/ 點擊 下載

Android Studio 第五期 - Android系統設置選項的包名

android setting以com.android.settings開頭的形式:com.android.settings.Settings 手機系統設置 com.android.settings.WirelessSettings 無線和網絡設置 com.android.settings.Accessibi

Linux學習總結(三)lamp配置防盜鏈

lamp 防盜鏈 filematch 限制ip訪問 一配置防盜鏈 referer,中文釋義為來源,也就是在說網站從哪裏訪問過來,在訪問日誌裏,它指的是不同網站之間的跳轉鏈接信息。也就是跳轉源的網址。雖然直接在瀏覽器輸入某個站點,跟從其他網站打開該網站,我們感受到的效果沒有差別,但是服務器端會

Linux學習-Linux用戶管理

host 通用 sla 文章 create HR test 範圍 HA Linux用戶管理 Linux系統跟Windows系統一樣,可以創建不同的用戶,不同的用戶組。在不同用戶下使用系統具有相應的權限 創建一個普通用戶時,會修改幾個文件,拷貝一些初始文件到用戶家目錄中 修改

skyfans每天一個Liunx命令系列:id

截止到上一章,我們終於學完了PERFORMANCE MONITORING AND STATISTICS(效能監測與統計)的命令。 那今天我們來學習什麼類的命令呢,那就是USER INFORMATION AND MANAGEMENT(使用者資訊和管理),今天學習的是什麼命令呢,那就是id(顯示

[搬運工系列]-JMeter()JmeterBean shell使用(二) JmeterBean shell使用(一) JmeterBean shell使用(一)

 上一篇Jmeter之Bean shell使用(一)簡單介紹了下Jmeter中的Bean shell,本文是對上文的一個補充,主要總結下常用的幾種場景和方法,相信這些基本可以涵蓋大部分的需求。本節內容如下: 一、操作變數 二、操作屬性  三、自定義函式 四、引用外部java檔案 五、引用外

[搬運工系列]-JMeter()JmeterBean shell使用(一)

一、什麼是Bean Shell BeanShell是一種完全符合Java語法規範的指令碼語言,並且又擁有自己的一些語法和方法; BeanShell是一種鬆散型別的指令碼語言(這點和JS類似); BeanShell是用Java寫成的,一個小型的、免費的、可以下載的、嵌入式的Java原始碼直譯器,

機器學習實踐()—sklearn模型儲存和載入

一、sklearn - 模型的儲存和載入 - API from sklearn.externals import joblib 儲存 joblib.dump(rf, ‘test.pkl’) 載入 estimator

java B2B2C電子商務平臺分析----Zuul的容錯回退與高可用

zuul的容錯與回退 之前說到過,使用Hystrix實現微服務的容錯與回退,其實Zuul預設已經整合了Hystrix,使用起來也是比較簡單: 在原有 zuul-gateway 專案的基礎上新增,實現ZuulFallbackProvider介面,並實現getRoute和fallbackRespons

、SpringBoot啟動原理

幾個重要的事件回撥機制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener 只需要放在ioc容器中 Applicatio

spring深入學習() IOC parentBeanFactory 與依賴處理

繼上篇部落格 【死磕 Spring】—– 載入 bean 之 快取中獲取單例 bean,如果從單例快取中沒有獲取到單例 bean,則說明兩種情況: 該 bean 的 scope 不是 singleton 該 bean 的 scope 是 singleton ,但是沒有初始化