【问题标题】:Configuration design pattern across Java system跨 Java 系统的配置设计模式
【发布时间】:2012-09-06 14:48:05
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java design-patterns configuration


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我宁愿注入一个类,而不是将其指定为单例。这将使测试很多更容易
      • 迄今为止的 4 个应用程序和 20 个内部库的全球范围?
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多