我正在开发一个可在 Android、Web 和桌面应用程序中使用的 Java 库。该库由几个大部分独立的模块组成,这些模块共享通用的配置设置(例如“启用”、“api key ”)。
目标
配置应允许在运行时进行更改(例如 Android 中的 API、JMX 或 SharedPreferemes),而不会影响可移植性(例如无数据库)、可测试性或线程安全性(某些模块在单独的线程中运行)。
方法
我当前使用的是一个配置对象,我在启动时创建该对象并将其传递给各个模块(这些模块本身将其传递给子类)。然后,每个类将其所需的字段复制到本地字段 - 唯一的问题:无法在运行时更改设置。
其他想法:
- 使用静态:难以测试
- 将引用传递给模块:线程安全?
这里的最佳解决方案/最佳实践是什么?
<小时/>更新:需要明确的是,模块不需要知道配置是否发生了更改,它应该简单地直接使用该字段的新值并从那时起使用它。
最佳答案
一些建议:
- 不要将每个类需要的字段复制到本地字段;始终从配置对象访问属性(任何缓存管理都应在配置对象上完成)
- 确保使用配置对象的类不会以任何方式直接修改它(通过插入、删除键或更改其值)
- 在实例化时在配置对象中预加载所需的所有信息
- 使配置对象成为单例,并在需要的客户端之间共享它
- 为配置对象提供一种机制,以逐出任何不再有效的缓存条目
- 使用观察者模式使缓存保持最新
关于java - 如何管理 Java 库的内部配置设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767909/