我的大部分编程都是基于网络的应用程序,尽管我已经为个人项目做了一些桌面应用程序开发。一个反复出现的设计问题是如何管理配置。例如,我们都知道在ASP.NET中,web.config经常用于保存配置信息,无论是生成还是手动配置。
在我知道什么是设计模式之前,我会实现一个本质上是Singleton模式的东西。我写了一个静态类,它在启动时会读取配置文件并将信息以及任何自动生成的信息存储在字段中,然后通过某种访问器将这些信息暴露给应用程序的其余部分(属性) ,get()方法......)。
我心中的某些东西一直告诉我,这不是最好的方法。所以,我的问题是,是否有任何设计模式或指南来设计配置系统?配置系统何时以及如何读取配置,以及如何将此信息公开给应用程序的其余部分?应该是单身人士吗?我不是要求推荐的存储机制(XML与数据库对文本文件......),尽管我也对这个问题的答案感兴趣。
答案 0 :(得分:1)
听起来不像警察,但它真的完全取决于你的应用程序。非常简单的应用程序(听起来像你在谈论基于Web的应用程序,所以我会跳过胖客户端),通常只需要全局配置(你可以使用web.config和单例)和每用户配置(用户表) ,并且可能链接的配置表或名称/值对表可以处理。
更复杂的应用程序可能需要一个可保护和可覆盖的完整配置层次结构。例如,我可能有几个应用程序定义的默认值,可以为用户所属的每个组覆盖,用户自己,最后是用户无法覆盖的特定组或用户的管理员定义值。 / p>
为此,我通常使用单例“root config”对象,该对象具有在每个级别公开层次结构和配置属性的其他级别的方法。根负责解析层次结构,但如果需要(例如设置配置),您可以自己遍历层次结构以处理特定于层次结构中的单个级别的设置。
最后,还有延迟问题。如果您希望配置设置经常更改,请在每次请求时从存储中读取它们是最好的,但是最昂贵。
如果没有,您可以缓存设置以及“上次读取”日期,并在到期时间之后将设置值重新读入缓存。
答案 1 :(得分:1)
Guidlines:
考虑管理设置
E,G web.config更改需要具备技术技能的人,并导致应用程序在更改时重置;其中 - 由系统提供的UI访问的设置不会出现这些问题。
安全强>
命名约定
基于URI的关键示例:
<appSettings>
<add key="Morphological.RoboMojo.BusinessLogic.IJobDataProvider" value="Morphological.RoboMojo.XmlDataProvider.JobDataProvider, Morphological.RoboMojo.XmlDataProvider"/>
<add key="Morphological.RoboMojo.BusinessLogic.ITaskDataProvider" value="Morphological.RoboMojo.XmlDataProvider.TaskDataProvider, Morphological.RoboMojo.XmlDataProvider"/>
<add key="Morphological.RoboMojo.XmlDataProvider.NameAndPathOfDataFile" value="C:\Program Files (x86)\Morphological Software Solutions\RoboMojo\RoboMojoState.txt"/>
<add key="Morphological.RoboMojo.XmlDataProvider.PathOfDataFileBackups" value="C:\Program Files (x86)\Morphological Software Solutions\RoboMojo\RoboMojoState Backups"/>
<add key="Morphological.RoboMojo.BusinessLogic.ITaskExecutorProvider" value="Morphological.RoboMojo.TaskExecutorMSRoboCopy.RoboMojo, Morphological.RoboMojo.TaskExecutorMSRoboCopy"/>
<add key="Morphological.RoboMojo.TaskExecutorMSRoboCopy.LocationOfRoboCopyEXE" value="C:\Windows\System32\RoboCopy.EXE"/>
</appSettings>