88

在大型和复杂的软件产品中,管理可配置设置成为一大难题。我看到的解决问题的两种方法是:

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

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

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

4

4 回答 4

50

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

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

于 2009-08-22T00:24:24.273 回答
21

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

我认为 Reed Copsey 有权(我投票支持他),但我绝对会推荐阅读 Martin Fowler 关于依赖注入的精彩文章:

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

一个小小的附录……如果你想做任何模拟对象类型的单元测试,依赖注入绝对是要走的路。

于 2009-08-22T01:32:36.367 回答
5

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

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

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

于 2012-05-10T12:45:38.800 回答
0

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

于 2019-09-05T10:06:45.973 回答