1. 程式人生 > >Winform開發中的程式設計習慣

Winform開發中的程式設計習慣

1.整個解決方案包含一個啟動專案和類庫專案

     啟動專案只包含一個主窗體(FrmMain)和程式入口類檔案(Program.cs)。
類庫專案主要是實現不同的功能(功能性程式碼建議放到相應的類庫專案中)。

     注意:不是.NET Framework4.0 client(此為精簡版)。

3.啟動配成x64或者x86平臺,類庫專案統一配置成Any CPU

     注意:如果系統為64位,啟動專案推薦配置成x64平臺,這樣可以更好的利用64位機器的記憶體空間。但是64位程式可能存在呼叫一些dll不相容的問題,詳情請參考部落格C# 編譯器選項 /platform(指定輸出平臺)32位程式執行到x64平臺的問題

。我這裡面配置成了x86平臺。

     對於類庫專案,則推薦配置為Any CPU,這樣程式類庫可以在任意平臺上執行。詳情請參考部落格C#中Any CPU和X86和X64平臺的差異對比

4.類庫專案中窗體和類命名規範

     窗體統一放入Forms資料夾中,以Frm開頭,命名儘量做到見名知意,並保持名稱空間名稱一致。
類檔案統一放入Classes資料夾中,以Cls開頭,命名儘量做到見名知意,並保持名稱空間名稱一致。

5.資料庫連線

     對於資料庫連線等程式碼,應只調用一處連線,並把資料庫連線配置到App.config檔案中或者Properties下的Settings.setting檔案,或者直接配置成xml檔案進行統一的資料庫連線配置。


<?xml version="1.0"?>
<configuration>
 <startup>
   <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
 </startup>
 <appSettings>
   <add key="SqlServerConnectionString" name="Data Source=.;Initial Catalog=XXXX;Persist Security Info=True;User ID=sa;Password=1"
/>
</appSettings> </configuration>

6.程式碼重構

     1)完成功能後,需要進行程式碼重構,主要對程式碼進行方法、類、介面的封裝,儘量避免程式碼冗餘。

     2)對於重複利用的程式碼片段,儘量封裝成公用的方法並放入單獨的類檔案和類庫專案中(通常放入以XXXXCommon命名的類庫專案中)。

7.SVN使用建議

     1)每天晚下班前必須將當天的程式編譯除錯通過並上傳SVN。

     2)每天早上上班首先需要更新SVN最新版本。

     3)在程式中新增頁面、刪除頁面及修改頁面命名時,需要先更新全部程式特別是解決方案檔案,然後再做新增或者刪除頁面以及修改頁面名稱,做完這類操作後需立刻上傳SVN,以免造成解決方案衝突。

     4)bin資料夾、obj資料夾、 *.suo *.user 等不允許提交到SVN上,應在本地通過SVN客戶端新增到忽略列表中。

     5)svn程式碼衝突不可避免,要養成一定的解決程式碼衝突的能力,同時,一個啟動專案多個類庫專案的程式碼層次一定程度上可以減少程式碼衝突的產生。

8.程式碼除錯

     1)程式中如果出現彈框提示:那麼一般是兩種情況導致的,第一是寫了一個MessageBox彈框提示;第二是程式中存在try catch。

     2)寫程式碼的時候最好加上try….catch….finally,但是在除錯的時候需要全部註釋掉try catch,這樣程式碼出現問題才會顯示出錯的地方。

9.C#程式碼習慣

     1)C#程式碼本來就很長,儘量把程式碼寫短。迴圈中不要頻繁呼叫包含迴圈的函式。

     2)程式碼中最多三層迴圈,多於三層的迴圈就要想像其它辦法了。

     3) 對於處理資料的程式碼,一定要提前判斷出由於資料異常可能導致的系統崩潰等原因。然後在程式碼中寫一個處理資料異常的函式。這樣才能提高系統的容錯性。比如對於key,value鍵值對,其都可以為字串型別,但是字串中可以包含各種各樣的資料。因此需要考慮到字串是否包含數字,下劃線等其他字元,字串前後是否有空格等情況。

     4) 避免在主窗體中註冊事件,否則控制元件的某個事件註冊可能會影響到該控制元件的其他事件(尤其是在同一個事件中需要完成不同的功能時,比如SceneControl中面積量算和地形開挖都會用到其Tracking和Tracked事件,此時這兩個事件需要完成不同的功能,所以最好封裝在單獨的類中而不是主窗體中)。滑鼠的單擊事件、SceneControl的滑鼠追蹤事件應該封裝到單獨的類中,並且應該在該類的建構函式中完成事件註冊,而不是某個函式中。最後呼叫某個函式登出所有的註冊過的事件。
     當然,也可以用switch選擇語句,但是如果實現的功能比較多的話,用switch選擇語句處理的話,相應的事件中的程式碼量會非常大。