2012-09-06 26 views
4

我一直用來教我自己代碼的c#項目迄今爲止是一個包含大量函數和大量「全局」靜態變量的巨大形式。風格/架構健全性檢查多個類和形式

在閱讀了這裏,做了一些教程等,我現在試圖通過重構它的過程來正確使用類和封裝。

我的課:

  • Program.cs - 基本上什麼也不做,但初始化Form1
  • Form1.cs =生成並修改所有UI。在其他類中調用公共函數,並且有一些其他類可以調用的公共函數來更新它。
  • UiStrings.cs =包含所有錯誤信息,對話框,說明等
  • Options.cs =跟蹤一些設置,建立和更新路徑安裝文件,執行基於改變用戶界面代碼。
  • Updater.cs =追蹤當前版本,下載資產,將它們放在正確的位置,並調整選項。
  • Installer.cs =根據當前選項,處理安裝/卸載/備份所有資產。

最初,我在Form1中創建了其他每個類的實例。這對Form1有效,可以訪問UiStringsOptions中的函數和屬性。然而這些類不能訪問彼此的部分,可能是因爲它們沒有被實例化。

這導致我走向所有我的自定義類,如UiStringsOptions靜態(因爲我不需要它們中的任何一個的多個實例)。這也意味着我必須使每個類中的每個函數和屬性都是靜態的。

這是一個合理的解決方案,一個真正知道他們在做什麼的人會來嗎?

它到目前爲止似乎在我的測試工作,但我的原始嘗試沒有類的工作都很好,直到我知道它是如何錯誤。

+2

「UiStrings」和「Options」是靜態的或實現單例模式是有意義的。但恕我直言,*一切*靜態是一種代碼味(大量的全局變量)。 –

回答

2

如果打開項目屬性(右鍵單擊在解決方案資源管理項目,右鍵單擊,選擇屬性),你會發現資源選項卡,這是你的UiStrings是什麼,和設置選項卡這是你的選擇是什麼。我會建議使用它們作爲標準功能。這也消除了設計自己的要素類的需要。

除此之外,你可以做到這一點靜態,你不必創建一個類的副本來訪問靜態成員。語法是ClassName.Method()或ClassName.Property,而不是var instance = new ClassName(); instance.Method();