7

问题是老帽子——在我们的系统中支持配置文件或系统配置的正确设计是什么?我已经确定了以下要求:

  • 应该能够实时重新加载并立即获取更改而无需重新部署
  • 对于依赖相同的软件应用程序,例如 SQL 或 memcached 凭证,应该可以在一个孤立的地方引入更改并一举部署,即使应用程序位于不同位置的不同机器上
  • 支持运行相同应用程序的许多进程/机器

我正在努力解决的这个设计的部分:

  • 每个主要类都应该将自己的“Config”类作为构造函数的输入参数吗?是否应该有一个工厂负责实例化正确的配置?还是每个类都应该从自己的配置中读取并自动重新加载?
  • 如果类 B 派生自类 A,或者围绕它进行组合,那么继承 Config 文件是否有意义?
  • 假设类 A 由 M1 和 M2(M 代表“main”)构建,M1 负责实例化资源。假设资源依赖于我希望在 M1 和 M2 之间通用的 MySQL 凭据,有没有办法避免打破所有权的权衡并放入 A 的配置 v. 跨 M1 和 M2 的配置复制资源?

这些是我现在正在处理的设计问题,并不真正了解在这里工作的设计模式或框架。我在 Java 中,所以任何解决这个问题的库都非常受欢迎。

4

2 回答 2

8

您可能想查看Apache Commons Config,它提供了广泛的功能。您可以指定多个配置源,并将它们排列成层次结构。一个特别感兴趣的特性是提供配置事件,允许您的组件注册它们对配置更改的兴趣。

动态更改配置的目标是诱人的,但需要对设计进行一些思考。您需要仔细管理这些更改(例如,如果您缩小队列大小会发生什么 - 您是否丢弃队列中的现有元素?)

于 2012-09-06T14:50:44.107 回答
0

每个主要类都应该将自己的“Config”类作为构造函数的输入参数吗?

不,这听起来像是一个糟糕的设计,会不必要地使大量代码过于复杂。我建议您将全局配置类实现为单例。单例意味着只有一个配置对象,它是您的 Configuration 类的私有静态变量,可以在需要时通过公共静态 getInstance() 方法获取。

此配置对象应将所有配置参数存储为键/值对。

于 2012-09-06T14:52:59.947 回答