55

在管理可配置设置的大型复杂软件产品中,成为一大难题。我见过的两种方法是:哪些设计模式可以应用于配置设置问题?

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

这些方法对我来说都感觉不对。

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

+4

为什么你认为选项2是错的? – ChaosPandion 2009-08-22 00:09:07

+2

它通常作为单例实现,但有其他方法可以实现它。 – 2009-08-22 01:35:01

回答

37

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

这允许在替换配置策略方面具有灵活性,并为所有工作提供了一个通用基础。我更喜欢这个到一个单一的全局“设置加载器”(您的选项2),特别是因为我可以重写单个组件的配置机制,如果我绝对需要这样做的话。

+0

你好,如果你分享一些样品,它会很好:) – issamux 2018-03-07 15:17:40

17

我目前工作的系统中,配置由一个全局单例对象管理,该对象将配置键映射到值。一般来说,我希望它没有这样做,因为它可能会导致系统中的并发瓶颈,并且对于单元测试等是sl 012不驯的。

我认为里德科普塞有权利(我投票给他) ,但我肯定会推荐阅读Martin Fowler的依赖注入大文章:

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

略有增编过...如果你想要做的任何模拟对象类型的单元测试,依赖注入肯定是办法走。

+0

看来,装饰符合你的需求。你可以创建一个可以按照自己的方式使类可序列化的序列化装饰器。可以使用策略使所有对象都有序列化策略。那些不需要序列化的对象可以使用忽略策略。那些只需要序列化他们的字段OnlyFields策略等等。你可以灵活地向你的配置添加新的东西。当然,所有的方法都有它的优点和缺点。 – 2009-08-23 14:39:36

3

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

根对象可以以任何他们想要的方式(例如:从配置文件中读取它)来创建配置哈希表。这个散列表可能包含根对象iselft的配置参数,以及其组件,子组件,子子组件(etc)可能使用的任何参数。

根对象然后调用所有可配置组件上的配置(配置)。