在大型和复杂的软件产品中,管理可配置设置成为一大难题。我看到的解决问题的两种方法是:
- 让系统中的每个组件从配置文件或注册表设置中加载自己的配置。
- 有一个设置加载器类,它加载所有可配置的系统设置,并让每个组件查询设置加载器的设置。
这些方法对我来说都是错误的。
是否有任何设计模式可用于简化问题?也许可以利用依赖注入技术。
在大型和复杂的软件产品中,管理可配置设置成为一大难题。我看到的解决问题的两种方法是:
这些方法对我来说都是错误的。
是否有任何设计模式可用于简化问题?也许可以利用依赖注入技术。
我更喜欢创建一个用于设置查询、加载和保存的界面。通过使用依赖注入,我可以将它注入到每个需要它的组件中。
这在替换配置策略方面提供了灵活性,并为一切工作提供了一个共同的基础。我更喜欢它而不是单个全局“设置加载器”(您的选项 2),特别是因为如果我绝对需要这样做,我可以覆盖单个组件的配置机制。
我目前在一个系统上工作,其中配置由一个全局单例对象管理,该对象保留配置键到值的映射。一般来说,我希望它没有这样做,因为它会导致系统中的并发瓶颈,并且它对于单元测试等很草率。
我认为 Reed Copsey 有权(我投票支持他),但我绝对会推荐阅读 Martin Fowler 关于依赖注入的精彩文章:
http://martinfowler.com/articles/injection.html
一个小小的附录……如果你想做任何模拟对象类型的单元测试,依赖注入绝对是要走的路。
这个怎么样。您使用单个方法配置(配置)定义一个可配置的接口。配置参数只是一个哈希表,它将配置参数的名称与其值相关联。
根对象可以以任何他们想要的方式创建配置哈希表(例如:从配置文件中读取它)。此哈希表可能包含根对象 iselft 的配置参数,以及其组件、子组件、子子组件(等)之一可能使用的任何参数。
然后,根对象在其所有可配置组件上调用 configure(configuration)。
您可以创建定义配置加载器的接口的多个实现。基本上是策略模式,您可以将一个基本接口定义为 configLoader,然后进一步不同的实现,例如 FileSystemLoader、ClasspathLoader、EnvVariablesLoader 等。此链接的详细信息