.Net平臺(tái)開(kāi)發(fā)實(shí)踐的一些點(diǎn)滴總結(jié)(技術(shù)規(guī)范與實(shí)踐精華)第1/2頁(yè)
以下是本人對(duì).Net平臺(tái)開(kāi)發(fā)實(shí)踐的一些點(diǎn)滴總結(jié)。這里的技術(shù)規(guī)范主要是開(kāi)發(fā)過(guò)程的代碼規(guī)范、數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范、Com和.Net互操作規(guī)范;實(shí)踐精華是對(duì)技術(shù)實(shí)踐過(guò)程中的部分總結(jié)。
一、代碼規(guī)范
良好的代碼風(fēng)格來(lái)自于同一的代碼規(guī)范。風(fēng)格良好的代碼不僅具備可讀性和可維護(hù)性,同時(shí)也給人行云流水、賞心悅目之快感。
據(jù)Microsoft公司統(tǒng)計(jì),基于微軟平臺(tái)的開(kāi)發(fā)中,有70-80%的印度工程師在完成同類(lèi)算法或者模塊時(shí),使用的代碼基本一致;而相同的調(diào)查中只有20%的中國(guó)工程師們是基本一致的。這說(shuō)明我們的代碼生產(chǎn)過(guò)程亟待規(guī)范。
實(shí)義命名
類(lèi)型、變量、常量、方法等標(biāo)識(shí)符一律采用對(duì)應(yīng)的英文實(shí)義;如果涉及到兩個(gè)獨(dú)立的實(shí)義單詞,則中間用下劃線間隔或者單詞首字母大寫(xiě)(兩種方式都可以);如果標(biāo)識(shí)符的長(zhǎng)度超過(guò)了30個(gè)字母,則基本上以英文單詞發(fā)音的重讀音節(jié)取選出三個(gè)字母,如Repeater用rpt,Management用mgt。
大小寫(xiě)規(guī)則
目前一般有兩種大小寫(xiě)規(guī)則:
Pascal大小寫(xiě)形式,所有單詞第一個(gè)字母大寫(xiě),其他字母小寫(xiě)。
Camel大小寫(xiě)形式,除了第一個(gè)單詞,所有單詞第一個(gè)字母大寫(xiě),其他字母小寫(xiě)。
類(lèi)名使用Pascal大小寫(xiě)形式
public class HelloWorld(或者Hello_World,以下同,不再贅述) { ... } |
方法使用Pascal大小寫(xiě)形式
public class HelloWorld() { void SayHello(string name) { ... } } |
變量和方法參數(shù)使用Camel 大小寫(xiě)形式
public class HelloWorld() { int totalCount = 0; void SayHello(string name) { string fullMessage = "Hello " + name; ... } } |
不要使用匈牙利方法來(lái)命名變量
以前,多數(shù)程序員喜歡把數(shù)據(jù)類(lèi)型作為變量名的前綴而m_作為成員變量的前綴。例如: string m_sName;int nAge;
然而,這種方式在.NET編碼規(guī)范中是不推薦的。所有變量都用Camel 大小寫(xiě)形式,而不是用數(shù)據(jù)類(lèi)型和m_來(lái)作前綴。
用name,address,salary等代替nam,addr,sal。
別使用單個(gè)字母的變量象i,n,x 等。使用 index,temp等。用于循環(huán)迭代的變量例外:
如果變量只用于迭代計(jì)數(shù),沒(méi)有在循環(huán)的其他地方出現(xiàn),允許用單個(gè)字母的變量命名,而不是另外取實(shí)義名。
文件名要和類(lèi)名匹配,例如,對(duì)于類(lèi)HelloWorld,相應(yīng)的文件名應(yīng)為helloworld.cs。
縮進(jìn)和間隔
縮進(jìn)用TAB,不用 SPACES。
注釋需和代碼對(duì)齊。
遵循VS2005的自動(dòng)對(duì)齊規(guī)則,不要人為的調(diào)整。
用一個(gè)空行來(lái)分開(kāi)代碼的邏輯分組。
在一個(gè)類(lèi)中,各個(gè)方法的實(shí)現(xiàn)體必須用空行間隔,大括弧“{}”需獨(dú)立一行。
在每個(gè)運(yùn)算符和括號(hào)的前后都空一格。如:
If ( showResult == true ) { for ( int i = 0; i < 10; i++ ) { // } } |
而不是:
if(showResult==true) { for(int i= 0;i<10;i++) { // } } |
良好的編程習(xí)慣
避免使用大文件。如果一個(gè)文件里的代碼超過(guò)300~400行,必須考慮將代碼分開(kāi)到不同類(lèi)中。
避免寫(xiě)太長(zhǎng)的方法。一個(gè)典型的方法代碼在1~30行之間。如果一個(gè)方法發(fā)代碼超過(guò)30行,應(yīng)該考慮將其分解為不同的方法。
方法名需能看出它作什么。別使用會(huì)引起誤解的名字。如果名字一目了然,就無(wú)需用文檔來(lái)解釋方法的功能了。
一個(gè)方法只完成一個(gè)任務(wù)。不要把多個(gè)任務(wù)組合到一個(gè)方法中,即使那些任務(wù)非常小。
使用C# 的特有類(lèi)型,而不是System命名空間中定義的別名類(lèi)型。如:
int age; string name; object contactInfo; |
而不是:
Int16 age; String name; Object contactInfo; |
這么做是基于如下兩點(diǎn)原因:(1)規(guī)范性和一致性;(2)便于跨語(yǔ)言平臺(tái)的移植。
別在程序中使用固定數(shù)值,用常量代替。別用字符串常數(shù),盡量用資源文件。
避免使用很多成員變量,聲明局部變量,并傳遞給方法。
不要在方法間共享成員變量,如果在幾個(gè)方法間共享一個(gè)成員變量,那就很難知道是哪個(gè)方法在什么時(shí)候修改了它的值。必要時(shí)使用enum,別用數(shù)字或字符串來(lái)指示離散值。
別把成員變量聲明為 public或 protected。都聲明為private 而使用 public/protected 的Properties。
不在代碼中使用具體的路徑和驅(qū)動(dòng)器名,使用相對(duì)路徑,并使路徑可編程。永遠(yuǎn)別設(shè)想你的代碼是在"C:"盤(pán)運(yùn)行。你不會(huì)知道,一些用戶在網(wǎng)絡(luò)或"Z:"盤(pán)運(yùn)行程序。
應(yīng)用程序啟動(dòng)時(shí)作些“自檢”并確保所需文件和附件在指定的位置。必要時(shí)檢查數(shù)據(jù)庫(kù)連接,出現(xiàn)任何問(wèn)題給用戶一個(gè)友好的提示。
如果需要的配置文件找不到,應(yīng)用程序需能自己創(chuàng)建使用默認(rèn)值。如果在配置文件中發(fā)現(xiàn)錯(cuò)誤值,應(yīng)用程序要拋出錯(cuò)誤,給出提示消息告訴用戶正確值。錯(cuò)誤消息需能幫助用戶解決問(wèn)題。
注釋
別每行代碼,每個(gè)聲明的變量都做注釋。在需要的地方注釋。
可讀性強(qiáng)的代碼需要很少的注釋?zhuān)绻械淖兞亢头椒ǖ拿己苡幸饬x,會(huì)使代碼可讀性很強(qiáng)并無(wú)需太多注釋。行數(shù)不多的注釋會(huì)使代碼看起來(lái)優(yōu)雅。
如果因?yàn)槟撤N原因使用了復(fù)雜艱澀的原理,必須為程序配備良好的文檔和詳細(xì)的注釋。
對(duì)注釋做拼寫(xiě)檢查,保證語(yǔ)法和標(biāo)點(diǎn)符號(hào)的正確使用。
二、數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范
表格分類(lèi)與命名
數(shù)據(jù)表的分類(lèi)
系統(tǒng)表 支撐業(yè)務(wù)模型的數(shù)據(jù)表,如流程模型、系統(tǒng)管理相關(guān)表。
業(yè)務(wù)表 產(chǎn)品提供的針對(duì)業(yè)務(wù)的通用功能模塊相關(guān)表,如通用業(yè)務(wù)查詢等。
用戶表 用戶二次開(kāi)發(fā)使用的與具體業(yè)務(wù)相關(guān)的數(shù)據(jù)表。
數(shù)據(jù)表的命名
所有表格命名一律以字母“T”開(kāi)頭(Table),并且用實(shí)義單詞以下劃線“_”間隔。
系統(tǒng)表 系統(tǒng)表前綴為:TSYS_
業(yè)務(wù)表前綴為:TBIZ_
用戶表由用戶自行定義,但是建議不要與系統(tǒng)表和業(yè)務(wù)表的命名規(guī)則重復(fù)。
字段的命名
字段的命名規(guī)則參照代碼標(biāo)識(shí)符的命名規(guī)則,但是注意避開(kāi)數(shù)據(jù)庫(kù)的保留字。比如不要采用這樣的字段名:index,field,password,id,Oracle,SQL等等。
對(duì)于涉及到技術(shù)核心的系統(tǒng)表,為了防止剖析,建議采用類(lèi)似“F1,F(xiàn)2,F(xiàn)3……Fn”的方式命名。但是不要采用“F0”,因?yàn)檫@個(gè)名稱在某些數(shù)據(jù)庫(kù)中不被允許,比如Interbase。
索引的建立
索引是一把雙刃劍,索引將提高查詢的效率,但是卻降低了insert/delete/update 的效率。
通常情況下,對(duì)數(shù)據(jù)的編輯頻度和時(shí)限要求遠(yuǎn)遠(yuǎn)低于對(duì)數(shù)據(jù)庫(kù)的查詢要求,因此對(duì)于記錄很多且頻繁查詢的數(shù)據(jù)表,必須建立索引。
大多數(shù)數(shù)據(jù)庫(kù)為主鍵字段自動(dòng)創(chuàng)建索引,注意為外鍵創(chuàng)建索引。
不要索引大字段,這樣作會(huì)讓索引占用太多的存儲(chǔ)空間。
盡量不要索引頻繁編輯的小型表。
identify字段不要作為表的主鍵與其它表關(guān)聯(lián),這將會(huì)影響到該表的數(shù)據(jù)遷移。如果考慮支持多數(shù)據(jù)庫(kù),建議主鍵采用程序生成的唯一值。
如果一個(gè)大型表需要頻繁的做insert/delete/update操作,同時(shí)也需要做高并發(fā)量的查詢,那么建議根據(jù)數(shù)據(jù)的訪問(wèn)頻度對(duì)表作拆分,而后建立索引。
相關(guān)文章
asp.net 獲取客戶端瀏覽器訪問(wèn)的IP地址的實(shí)例代碼
本篇文章主要介紹了asp.net 獲取客戶端瀏覽器訪問(wèn)的IP地址的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07.NET Core系列之MemoryCache 緩存選項(xiàng)
這篇文章主要介紹了.NET Core系列之MemoryCache 緩存選項(xiàng),詳細(xì)的介紹一下 MSCache 中的 Options,由此來(lái)介紹一些 MSCache 中的內(nèi)部機(jī)制,感興趣的小伙伴們可以參考一下2018-08-08ASP.NET使用HttpWebRequest讀取遠(yuǎn)程網(wǎng)頁(yè)源代碼
本文分享了一個(gè)使用HttpWebRequest讀取遠(yuǎn)程網(wǎng)頁(yè)的案例,供大家參考學(xué)習(xí)。2016-03-03FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
在ASP.Net 2.0中使用,只需要2個(gè)文件:FreeTextBox.DLL和ftb.imagegallery.aspx2009-11-11Asp.net 基于Cookie簡(jiǎn)易的權(quán)限判斷
基于Cookie簡(jiǎn)易的權(quán)限判斷代碼,需要的朋友可以參考下。2010-01-01導(dǎo)致Asp.Net站點(diǎn)重啟10個(gè)原因小結(jié)分析
Asp.Net站點(diǎn)有時(shí)候會(huì)莫名其妙的重啟,什么原因?qū)е碌膮s不得而知,經(jīng)過(guò)一番折騰后,我總結(jié)了導(dǎo)致Asp.Net站點(diǎn)重啟的10個(gè)原因,需要的朋友可以參考下。2011-08-08ASP.NET泛型一之泛型簡(jiǎn)介與基本語(yǔ)法
這篇文章介紹了ASP.NET泛型的簡(jiǎn)介與基本語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08