2011-10-14 21 views
1

我正在开发可用于Android,Web和桌面应用程序的Java库。该库由几个主要分离的模块组成,这些模块共享相同的配置设置(例如'enabled','api key')。如何管理Java库的内部配置设置?

的配置应该允许在运行时(如API,JMX或SharedPreferemes在Android设备)变化不影响便携性(例如,没有数据库),可测试性或线程安全的(有些模块的目标在单独的线程中运行)。

方法

我目前使用什么是配置对象我在启动时创建并传递到各个模块(其本身把它传递给子类)。然后每个类将它需要的字段复制到本地字段 - 唯一的问题是:设置无法在运行时更改。

其他的想法:利用

  • 静态:很难测试
  • 传递引用到模块:线程安全的?

这里最好的解决方案/最佳实践是什么?


UPDATE:只要是明确的,一个模块并不需要知道,如果更改了的配置,但是应当简单地直接使用该字段的新值,并从此与它的工作。

+0

我又有自己的想法:通过包裹每个配置领域的ConfigItem 我可以创建一个AndroidConfigItem 一个包装分别获得()检查是否SharedPreferences已经改变想法吗? – stephanos

+0

我想了一下,看看ehcache的源代码,看看他们是如何做到的,并得出结论认为Óscar的概念(观察者模式)对我来说是最好的方法 – stephanos

回答

1

几点建议:

  • 不要复制的每个类都需要一个本地标区;总是访问配置对象的属性(任何缓存管理都应该在配置对象上完成)
  • 确保没有任何使用配置对象的类以任何方式直接修改它(通过插入,删除密钥或改变其值)
  • 预载你在config对象需要在实例化时
  • 使配置对象的一个​​Singleton,并共享所需要的客户端之间的信息
  • 提供的配置机制对象来驱逐任何不再有效的缓存条目
  • 使用观察者图案保持高速缓存最新
+0

感谢您的建议 - 一个问题,当您说“在需要的客户中分享“,你的意思是存储对它的引用? – stephanos

+0

是的,通过这种方式,配置对象的所有客户端都将看到相同的最新信息 –