我正在使用C#.NET。
在我的软件中,我提供了设置对话框,用户可以通过该对话框设置我要保存到文件中的应用程序设置。
要求(典型):
我想知道最好的方法是什么?另外,将这些设置保存到磁盘的最佳方法是什么?我的意思是我应该创建一个Settings
类对象并将其序列化为'settings.dat'或提供结构化文件,如XML / JSON
几乎所有其他软件都需要这样做。那么,这个没有任何设计模式吗?
修改
嗯,那是我不知道的事情。这真好 :)。但是,当用户在中间使用该软件时,他会更改设置,然后应该更改使用这些全局Properties.Settings.Default。*的所有其他对象。有什么样的通知机制吗?某种事件?
答案 0 :(得分:13)
.Net项目已经具有“设置”概念,其范围限定为用户或应用程序,将满足您上述所有要求。有些类可以读取和写入设置。我强烈建议你看看这些而不是自己卷起来。
您可以在各种项目类型中使用“设置”,但在某些类型的项目(如ASP.Net项目)中,可能无法使用用户级设置。
答案 1 :(得分:7)
.Net附带的Settings类非常方便,我在大多数项目中使用它。需要注意的是应用程序的每个新版本都有自己的设置文件,因此请确保您具有合理的默认值。每当分发新的EXE时,所有设置都将消失。
全局状态很难正确处理,因此我通常将相关设置传递给构造函数或属性中的各种对象。而且我通常不会对这些对象应用设置更改,因为在很多情况下,对象很难智能地处理更改的设置。相反,我只是在创建新对象时使用新设置。如果需要立即应用设置,那么我只是转储旧对象并创建一个新对象。它只取决于应用程序的细节。
如果您的设置屏幕上有“应用”按钮,那么我建议您在保存后重新加载并显示所有值。这样显示器肯定包含实际保存的内容。如果解析了任何设置,这可能很重要。我让用户在特定字段中输入了一个月和日组合,并且他们使用的格式与预期的不同,因此保存的值不正确。通过在Apply之后更新屏幕,可以明显地发现这些错误。
我希望这有帮助!
答案 2 :(得分:3)
你和womp都是对的:
您应该创建一个Settings类,它是.NET设置上的Facade。通过这种方式,您可以获得两全其美:手动解决方案的可测试性以及通常与Microsoft Silver Bullets相关的易于实施。
答案 3 :(得分:0)
我个人会去Properties.Settings路线。将设置文件添加到应用的“属性”文件夹中。这使您可以轻松地将项目添加到应用程序的app.config文件中。有一个内置的.net类,可用于读取/写入Settings文件中的值。然后,您可以编写一个封装该功能的小包装类,或者只是在整个地方使用内置的.net。
我个人会创建一个线程安全的Singleton类,它使用内置的.net文件中的小包装类。是的,这是一些额外的工作,但它是一个小的数量,并为您的应用程序提供一些强大的功能,为一点点的工作。
编辑:抱歉忘记包含MSDN设置链接。
http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx
答案 4 :(得分:0)
正如其他人所建议的那样,使用“设置”功能是可行的方法。设置还会在更新事件时提供事件,以便您可以处理它们并采取必要的操作。您还可以使用Upgrade方法将设置从先前版本移动到较新版本。只需确保您只调用一次(可能来自安装程序)。
设置也可以绑定到控件,因此您无需手动将它们从控件映射到设置。