C#編碼規範和編程好習慣(3)

永遠別設想你的代碼是在“C:”盤運行。你不會知道,一些用戶在網絡或“Z:”盤運行程序。
應用程序啓動時作些“自檢”並確保所需文件和附件在指定的位置。必要時檢查數據庫連接。出現任何問題給用戶一個友好的提示。
如果需要的配置文件找不到,應用程序需能自己創建使用默認值的一份。
如果在配置文件中發現錯誤值,應用程序要拋出錯誤,給出提示消息告訴用戶正確值。
錯誤消息需能幫助用戶解決問題。永遠別用象“應用程序出錯”,“發現一個錯誤” 等錯誤消息。而應給出象“更新數據庫失敗。請確保登陸id和密碼正確。”的具體消息。
顯示錯誤消息時,除了說哪裏錯了,還應提示用戶如何解決問題。不要用象“更新數據庫失敗。”這樣的,要提示用戶怎麼做:“更新數據庫失敗。請確保登陸id和密碼正確。”
顯示給用戶的消息要簡短而友好。但要把所有可能的信息都記錄下來,以助診斷問題。
註釋
別每行代碼,每個聲明的變量都做註釋。
在需要的地方註釋。可讀性強的代碼需要很少的註釋。如果所有的變量和方法的命名都很有意義,會使代碼可讀性很強並無需太多註釋。
行數不多的註釋會使代碼看起來優雅。但如果代碼不清晰,可讀性差,那就糟糕。
如果應爲某種原因使用了複雜艱澀的原理,爲程序配備良好的文檔和重分的註釋。
對一個數值變量採用不是0,-1等的數值初始化,給出選擇該值的理由。
簡言之,要寫清晰,可讀的代碼以致無須什麼註釋就能理解。
對註釋做拼寫檢查,保證語法和標點符號的正確使用。
異常處理
不要“捕捉了異常卻什麼也不做”。如果隱藏了一個異常,你將永遠不知道異常到底發生了沒有。
發生異常時,給出友好的消息給用戶,但要精確記錄錯誤的所有可能細節,包括髮生的時間,和相關方法,類名等。
只捕捉特定的異常,而不是一般的異常。
好:
void ReadFromFile ( string fileName ) 

{  

try  

{   

// read from file.  

    }  

catch (FileIOException ex)  

{   

// log error.   

//  re-throw exception depending on your case.   

        throw;  



}
不好:
void ReadFromFile ( string fileName ) 

{  

try  

{   

// read from file.  

    }  

catch (Exception ex)   

{   

// Catching general exception is bad... we will never know whether it   

// was a file error or some other error.      

// Here you are hiding an exception.    

// In this case no one will ever know that an exception happened.   

        return "";    



}
不必在所有方法中捕捉一般異常。不管它,讓程序崩潰。這將幫助你在開發週期發現大多數的錯誤。
你可以用應用程序級(線程級)錯誤處理器處理所有一般的異常。遇到”以外的一般性錯誤“時,此錯誤處理器應該捕捉異常,給用戶提示消息,在應用程序關閉或 用戶選擇”忽略並繼續“之前記錄錯誤信息。
不必每個方法都用try-catch。當特定的異常可能發生時才使用。比如,當你寫文件時,處理異常FileIOException.
別寫太大的 try-catch 模塊。如果需要,爲每個執行的任務編寫單獨的 try-catch 模塊。 這將幫你找出哪一段代碼產生異常,並給用戶發出特定的錯誤消息。
如果應用程序需要,可以編寫自己的異常類。自定義異常不應從基類SystemException派生,而要繼承於IApplicationException。
不好:
 // Save the address. 

SaveAddress (  address ); 

// Send an email to the supervisor to inform that the address is updated. 

SendEmail ( address, email );    

void SaveAddress ( string address ) 

{  

// Save the address.  // ... 

}  

void SendEmail ( string address, string email ) 

{  

// Send an email to inform the supervisor that the address is changed.  // ... 

}
好:
 // Save address and send an email to the supervisor to inform that the address is updated. 

SaveAddress ( address, email ); 

void SaveAddress ( string address, string email ) 

{  

// Job 1.  

// Save the address.  

// ... 

// Job 2.  

// Send an email to inform the supervisor that the address is changed.  

// ... 

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章