提供软件设置的最佳方式?

我正在使用C#.NET。

在我的软件中,我提供了设置对话框,用户可以通过该对话框设置我要保存到文件的应用程序设置。

要求(典型):

  1. 我定义的每个类都使用这些设置的一部分。 所以,这些应该是所有类的全局。
  2. 这些应该在软件启动时加载。
  3. 当用户更改设置并单击“保存”/“应用”时。 当前设置应该更改。

我想知道最好的方法是什么? 另外,将这些设置保存到磁盘的最佳方法是什么? 我的意思是我应该创建一个Settings类对象并将其序列化为’settings.dat’或提供结构化文件,如XML / JSON

几乎所有其他软件都需要这样做。 那么,这没有任何设计模式吗?

编辑:

好吧,那是我不知道的事情。 这真好 :)。 但是,当用户在中间使用该软件时,他会更改设置,然后应该更改使用这些全局Properties.Settings.Default。*的所有其他对象。 有什么样的通知机制吗? 某种事件?

.Net附带的Settings类非常方便,我在大多数项目中使用它。 需要注意的是,应用程序的每个新版本都有自己的设置文件,因此请确保您具有合理的默认值。 每当分发新的EXE时,所有设置都将消失。

全局状态很难正确处理,因此我通常将相关设置传递给构造函数或属性中的各种对象。 而且我通常不会对这些对象应用设置更改,因为在很多情况下,对象很难智能地处理更改的设置。 相反,我只是在创建新对象时使用新设置。 如果需要立即应用设置,那么我只是转储旧对象并创建一个新对象。 它只取决于应用程序的细节。

如果您在设置屏幕上有“应用”按钮,那么我建议您在保存后重新加载并显示所有值。 这样显示器肯定包含实际保存的内容。 如果解析了任何设置,这可能很重要。 我让用户在特定字段中输入一个月和日组合,并且他们使用的格式与预期的不同,因此保存的值不正确。 通过在Apply之后更新屏幕,可以明显地发现这些类型的错误。

我希望这有帮助!

.Net项目已经具有“设置”的概念,其范围可以是用户或应用程序,它们将满足您上面的所有要求。 有些类可以读写设置。 我强烈建议你看看这些而不是自己卷起来。

在C#中使用设置

您可以在各种项目类型中使用“设置”,但在某些类型的项目(如ASP.Net项目)中,可能无法使用用户级设置。

你和womp都是对的:

您应该创建一个Settings类,它是.NET设置上的Facade。 通过这种方式,您可以获得两全其美:手动解决方案的可测试性以及通常与Microsoft Silver Bullets相关的易于实施。

我个人会去Properties.Settings路线。 将设置文件添加到应用程序的“属性”文件夹中。 这使您可以轻松地将项目添加到应用程序的app.config文件中。 有一个内置的.net类,可用于读取/写入设置文件中的值。 然后,您可以编写一个封装该function的小包装类,或者只是在整个地方使用内置的.net。

我个人会创建一个线程安全的Singleton类,它使用内置的.net文件中的小包装类。 是的,它是一些额外的工作,但它是一个小数量,并为您的应用程序提供一些强大的function,以进行一些工作。

编辑:抱歉忘记包含MSDN设置链接。

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

正如其他人建议使用设置function是要走的路。 设置还会在更新事件时提供事件,以便您可以处理它们并采取必要的操作。 您还可以使用“ 升级”方法将设置从先前版本移动到较新版本。 只需确保您只调用一次(可能来自安装程序)。

设置也可以绑定到控件,因此您不必手动将它们从控件映射到设置。