哪些设计模式可以应用于配置设置问题?

问题描述 投票:0回答:5

在大型且复杂的软件产品中,管理可配置设置成为一个主要难题。我见过的解决这个问题的两种方法是:

  • 让系统中的每个组件从配置文件或注册表设置加载自己的配置。
  • 有一个设置加载器类,用于加载所有可配置的系统设置,并让每个组件查询设置加载器以获取其设置。

这些方法对我来说都是错误的。

是否有任何设计模式可以用来简化问题?也许可以利用依赖注入技术。

design-patterns configuration configuration-files application-settings
5个回答
51
投票

我更喜欢创建一个用于设置查询、加载和保存的界面。通过使用依赖注入,我可以将其注入到每个需要它的组件中。

这使得更换配置策略具有灵活性,并为所有工作提供了一个共同的基础。与单个全局“设置加载器”(您的选项 2)相比,我更喜欢它,特别是因为如果我绝对需要这样做,我可以覆盖单个组件的配置机制。


22
投票

我目前正在开发一个系统,其中配置由一个全局单例对象管理,该对象保存配置键到值的映射。一般来说,我希望不要这样做,因为它可能会导致系统中的并发瓶颈,并且单元测试会很草率,等等。

我认为 Reed Copsey 有权利这么做(我投票给了他),但我绝对推荐阅读 Martin Fowler 关于依赖注入的精彩文章:

http://martinfowler.com/articles/injection.html

还有一个小小的附录...如果您想做任何模拟对象类型单元测试,依赖注入绝对是正确的选择。


5
投票

这个怎么样。您可以使用单个方法 configure(configuration) 定义一个 Configurable 接口。配置参数只是一个哈希表,它将配置参数的名称与其值关联起来。

根对象可以以任何他们想要的方式创建配置哈希表(例如:从配置文件中读取它)。该哈希表可以包含根对象本身的配置参数,加上其组件、子组件、子子组件(等)之一可能使用的任何参数。

根对象然后在其所有可配置组件上调用configure(configuration)。


0
投票

您可以创建定义配置加载器的接口的多个实现。基本上是策略模式,您可以将一个基本接口定义为 configLoader,然后进一步定义不同的实现,例如 FileSystemLoader、ClasspathLoader、EnvVariablesLoader 等。 详情请看这个链接


0
投票

我通常有读取用户设置的控制器(本地存储在键值对中,通过

UserSettings
类访问)。 每个控制器负责读取静态定义的用户设置。然后,他们将所需的依赖项注入到视图(例如主题、语言包)或其他控制器(例如持久性机制、序列化、策略)中。 用户设置的存储方式取决于平台(例如,用于 Web 的本地存储、用于桌面的 XML 文件)。

© www.soinside.com 2019 - 2024. All rights reserved.