2010-06-25 94 views
1

在Windows窗體,C#,.NET 3.5,VS2008 ...的WinForms MenuStrip中隔離,以提高代碼的可維護性

什麼是隔離的MenuStrip中(或任何複雜的控制組)代碼的好辦法,這是孩子菜單項,從我的表單的其餘部分?

例如,當我有一個帶有多個菜單的MenuStrip並且每個菜單都有一些菜單項(它們都有點擊事件)時,大量的代碼將被傳入Form.Desinger.cs文件中, Form.cs文件。這在技術上不會造成任何問題,但只是覺得有太多東西全都傾倒在一個地方(以及其他所有形式)。

在我的整個項目上運行代碼度量標準時,表單被標記爲具有任何項目文件的最差可維護性索引。通常情況下,我不會過於偏袒代碼度量工具的方向,但在這種情況下,我完全同意。

據代碼度量,形式違反了這些最佳做法:

  1. 太多的類耦合
  2. 的代碼
  3. 總體低可維護性

可能的解決方案太多行隔離從表單的其餘部分的MenuStrip:

  1. 將其填充到UserControl中
  2. 其他想法?
+0

將[GeneratedCode]屬性放在InitializeComponent方法上。 – 2010-06-25 20:18:04

回答

0

我認爲你應該關注表示邏輯的隔離業務邏輯,例如,不要在點擊處理程序中放置太多代碼,也不要執行菜單項的命令。

確保您的代碼度量標準不會觸及生成的代碼,也不會關注自動生成的代碼中的錯誤度量標準。

0

例如,您是否可以禁用或過濾CodeMetrics,以抓取* .Designer.cs?

如果不是,我會使用Factory類,以便您可以在一行中創建這些結構。不利的一面是,它降低了Designer的功能。在工廠中,例如,可以基於模板字符串+「_FileMenu」命名每個組件,以便可以在Factory構造函數中設置基本「名稱」。

爲了減少Form.cs文件中的代碼溢出,可以考慮更多的MVC方法,以便當設計器生成時(比如說一個private void button1_Click方法),可以將某些業務邏輯抽象爲其他類的其他方法。因此,例如,button1_Click將不會移動所有文件,而會調用InitiateMoveFileMethod(string source, string destination)