2010-03-31 18 views
12

我正在使用C#.NET。提供軟件設置的最佳方法?

在我的軟件中,我提供了設置對話框,通過該對話框用戶可以設置要保存到文件的應用程序設置。

要求(典型值):

  1. 我定義的每個類使用這些設置的某些部分。所以,這些應該對所有階級都是全球性的。
  2. 這些應該在軟件啓動時加載。
  3. 當用戶更改設置並點擊「保存」/「應用」。當前設置應該改變。

我想知道什麼是最好的方法來做到這一點?另外,將這些設置保存到磁盤的最佳方式是什麼?我的意思是我應該創建一個Settings類對象並將其序列化爲'settings.dat'或提供結構化文件(如XML/JSON)

這是幾乎所有其他軟件都需要的。那麼,這是不是有任何設計模式?

編輯:

好吧,那東西,我不知道。這真好 :)。但是,當用戶在中間使用軟件時說,他改變了設置,那麼使用這些全局Properties.Settings.Default。*的所有其他對象都應該改變。有沒有任何一種通知機制?某種事件?

回答

7

.Net附帶的Settings類非常方便,我在大多數項目中都使用它。需要注意的一點是,每個新版本的應用程序都有自己的設置文件,因此請確保您有默認設置。每當分配新的EXE時,所有設置都會消失。

全局狀態很難正確處理,所以我通常將相關設置傳遞給構造函數或屬性中的各種對象。我通常不會將設置更改應用於這些對象,因爲在很多情況下,對象很難智能地處理變化的設置。相反,我只是在創建新對象時使用新的設置。如果需要立即應用設置,那麼我只需轉儲舊對象並創建一個新對象。這取決於應用程序的細節。

如果您在設置屏幕上有一個應用按鈕,那麼我會建議在保存後重新加載並顯示所有的值。這樣顯示器肯定會包含實際保存的內容。如果解析任何設置,這可能很重要。我有用戶輸入一個月份和日期組合到一個特定的領域,他們使用的格式與預期的不同,因此保存的值不正確。通過在應用之後更新屏幕,這些錯誤可以變得明顯。

我希望這有助於!

+1

您可以使用升級方法(http://msdn.microsoft.com/zh-cn/library/system.configuration.applicationsettingsbase.upgrade.aspx)將先前版本的設置移動到新版本中。只要確保你只打電話一次。 – Giorgi 2010-03-31 19:30:51

+0

@Giorgi - 有趣!我將不得不嘗試一下。 – 2010-03-31 19:32:38

+0

添加此鏈接http://msdn.microsoft.com/en-us/library/aa730869%28VS.80%29.aspx給你回答,並按照Giorgi的評論編輯你的答案。所以我可以接受它作爲答案。 – claws 2010-03-31 21:31:11

13

.Net項目已經具有設置的概念,範圍爲用戶或應用程序,它將滿足您上面的所有要求。有類可以讀取和寫入設置。我強烈建議你看看這些,而不是自己動手。

Using Settings in C#

您可以使用設置在各種項目類型,雖然在某些類型的像ASP.Net工程項目,用戶級別的設置可能無法使用。

+1

@womp,不同版本之間的更新可能會變得非常棘手。 – Giorgi 2010-03-31 19:21:43

+0

當然,版本控制通常很棘手,這只是另一種情況。一般來說,這應該可以節省很多時間。 – womp 2010-03-31 19:27:52

+0

這些設置存儲在哪裏?該項目(DLL/EXE)的大會內部?或者將它存儲在某些settings.settings文件中,我應該將其與我的軟件一起部署。 – claws 2010-03-31 19:35:58

3

你和womp都是正確的:

您應該創建一個設置類,它是一個門面在.NET設置。通過這種方式,您可以獲得兩全其美的效果:手動解決方案的可測試性以及通常與Microsoft Silver Bullet相關的實現的簡易性。

0

我個人會去Properties.Settings路線。將設置文件添加到您的應用的屬性文件夾。這使您可以輕鬆地將項目添加到應用程序的app.config文件中。有一個內置的.net類,可用於讀取/寫入設置文件中的值。然後,您可以編寫一個封裝該功能的小封裝類,或者在整個地方簡單地使用內置的.net封裝類。

我個人會創建一個線程安全的Singleton類,它使用內置的.net類中的小包裝類。是的,這是一些額外的工作,但它是一個小數目,併爲您的應用程序提供了一些強大的功能,用於一點點的工作。

編輯:抱歉忘記包含MSDN設置鏈接。

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

0

正如其他人所使用的設置功能建議是要走的路。設置還會在更新事件時提供事件,以便您可以處理它們並採取必要的措施。您也可以使用Upgrade方法將先前版本的設置移動到新版本。只要確保你只調用一次(可能來自安裝程序)。

設置也可以綁定到控件,因此您不必將它們從控件手動映射到設置。

相關問題