哪些devise模式可以应用于configuration设置问题?
在庞大而复杂的软件产品中,pipe理可configuration设置成为一大难题。 我见过的两种方法是:
- 让系统中的每个组件都从configuration文件或registry设置中加载它自己的configuration。
- 有一个设置加载器类加载所有可configuration的系统设置,并让每个组件查询设置加载程序的设置。
这些方法对我来说都感觉不对。
有没有可以用来简化问题的devise模式? 也许会利用dependency injection技术。
我更喜欢创build一个接口来设置查询,加载和保存。 通过使用dependency injection,我可以注入到每个需要它的组件。
这使得在更换configuration策略方面具有了灵活性,并为所有工作提供了一个共同的基础。 我更喜欢这个到一个单一的,全局的“设置加载器”(您的选项2),特别是因为我可以覆盖单个组件的configuration机制,如果我绝对需要这样做。
我目前工作在一个系统,configuration是由一个全局单例对象来pipe理的,这个对象保存了一个configuration键值映射。 一般来说,我希望没有这样做,因为它可能会导致系统中的并发瓶颈,并且对于unit testing等是很渺茫的。
我认为里德·科普塞(Reed Copsey)有权利(我把他投给了他),但我肯定会推荐阅读马丁·福勒关于dependency injection的伟大文章:
http://martinfowler.com/articles/injection.html
还有一个小小的增补…如果你想做任何模拟对象types的unit testing,dependency injection肯定是要走的路。
这个怎么样。 您可以使用单个方法configure(configuration)定义一个可configuration的接口。 configuration参数只是一个哈希表,它将configuration参数的名称与它们的值相关联。
根对象可以以任何他们想要的方式(例如:从configuration文件读取它)来创buildconfiguration哈希表。 这个散列表可以包含根对象iselft的configuration参数,以及其组件,子组件,子子组件(etc)可能使用的任何参数。
然后根对象调用其所有可configuration组件上的configuration(configuration)。